INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Absturz durch unzulässige Pointer



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

25.10.2016, 18:21
Beitrag #1

VS_03 Offline
LVF-Neueinsteiger


Beiträge: 9
Registriert seit: Apr 2016

15.0f2 (64-bit)
2015
EN



Absturz durch unzulässige Pointer
Hallo liebe Community,

ich habe ein Problem bei der Übergabe von Daten zwischen LabView und meiner Speicherimplementierung als Library Function Node (dll). Kurz zum Aufbau: es laufen in zwei parallelen while-Schleifen Aufnahme- und Ausgabe-Tasks, zwischen diesen sollen Daten ausgetauscht werden. Zunächst wird für diesen Austausch ein Speicherbereich (Ringspeicher) initialisiert. Beim Lesen&Schreiben werden Datenpointer verwendet, beim Schreiben wird der Array Data Pointer (Input von Node) verwendet um eine Kopie in den Speicher anzulegen, beim Lesen wird ein Array Data Pointer (Input von Node) von LabView genutzt und in diesen werden die Daten dann aus dem Speicher übertragen (Output von Node).

Ein Debuggingreport hat ergeben, dass scheinbar des öfteren unzulässige Pointer wie 0x00000000 und 0xFFFFFFFF übergeben werden. Fehlerbild ist leider etwas schwer zu beschreiben, da LabView entweder sich selbstständig schließt/abstürzt oder eine bug registriert, versucht zu debuggen, dann zum schließen auffordert. Problem ist, dass die Abstürze völlig willkürlich erscheinen, manchmal nach längeren Betrieb (eher selten), manchmal beim schließen der Tasks (nicht beim ersten Aufruf), manchmal bei der Initialisierung (nicht beim ersten Aufruf). Zudem scheint meist der erste Lauf keine Abstürze zu erzeugen, sondern erst bei neuem Aufruf des VIs. Es scheint als würde mein angelegter Speicher in den von LabView eingreifen und damit Fehler erzeugen. Hat jemand Erfahrung mit der Speicherverwaltung von LabView und kann sagen, wann ein Speicher den Pointer 0x00000000 oder 0xFFFFFFFF erhalten würde? Zusätzlich die Frage, ob ein Shiftregister/globale Variablen immer feste Adressen haben oder dynamisch verwaltet werden? Idee war, dass evtl. LabView den Array Data Pointer vorzeitig auf unzulässige Werte setzt wenn die dll versucht die Daten zu holen.

Zusatz: Speicher ohne Aufnahme- und Ausgabe-Task funktioniert -scheinbar- ohne Probleme. Erst wenn die Tasks hinzukommen stürzt LabView ab.

Ich bin über jede Hilfe dankbar!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
25.10.2016, 19:26
Beitrag #2

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Absturz durch unzulässige Pointer
Verstehe ich richtig, du hast eine externe Speicherimplementation mit Pointers (also nicht in LabVIEW) geschrieben, und beschwerst dich jetzt über Abstürze in LabVIEW durch diese DLL? Dann such mal in deiner DLL...

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.10.2016, 22:07
Beitrag #3

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.689
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
RE: Absturz durch unzulässige Pointer
(25.10.2016 18:21 )VS_03 schrieb:  Kurz zum Aufbau: es laufen in zwei parallelen while-Schleifen Aufnahme- und Ausgabe-Tasks, zwischen diesen sollen Daten ausgetauscht werden.
Die erste Wahl zum Austausch von Daten zwischen zwei While-Schleifen heißt Queue ...

Zitat:Zunächst wird für diesen Austausch ein Speicherbereich (Ringspeicher) initialisiert.
Und das passiert in deiner DLL?

Warum verwendest du eine DLL zum Austauschen von Daten? Ich hoffe doch mal, du tust in der DLL wenigstens sonst noch was?

Zitat:Zudem scheint meist der erste Lauf keine Abstürze zu erzeugen
Das scheint aber auch nur so. Das dumme an einer AV ist, dass deren Auftreten und deren Auswirkung in den aller meisten Fallen in keinerlei zeitlichem Zusammenhang stehen.

Zitat:Zusätzlich die Frage, ob ein Shiftregister/globale Variablen
Globale Variablen? Selbstverständlich, und gerade wenn sie Arrays enthalten, werden die dynamisch verwaltet ...

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.10.2016, 18:32
Beitrag #4

VS_03 Offline
LVF-Neueinsteiger


Beiträge: 9
Registriert seit: Apr 2016

15.0f2 (64-bit)
2015
EN



RE: Absturz durch unzulässige Pointer
Das Problem hat sich gelöst, für Leute die auf ein ähnliches Problem stoßen. Es ist hilfreich bei Verwendung von eigenen structs zu schauen, ob die Länge auch passt, da unter umständen in anderen Paketlängen gearbeitet wird, sodass die Länge der Pakete länger ist als eigentlich angenommen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Datenübergabe an DLL Pointer to Pointer Reiling 2 9.589 02.02.2018 10:59
Letzter Beitrag: Reiling
  dll mit Pointer auf komplexe Struktur einbinden Wedgewood 11 17.001 27.04.2014 23:44
Letzter Beitrag: Wedgewood
  Pointer auf Array mit Labview übertragen und darstellen lupus022 35 32.461 19.07.2013 10:53
Letzter Beitrag: lupus022
  Pointer und MoveBlock OXO 4 8.202 03.06.2013 16:31
Letzter Beitrag: OXO
  Pointer auf Subarray übergeben Event Horizon 5 7.391 15.07.2012 10:21
Letzter Beitrag: rolfk
  DLL-Einbindung, Struct mit verschiedenen Datentypen als Pointer übergeben hawk72 4 11.059 11.05.2012 14:41
Letzter Beitrag: hawk72

Gehe zu: