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 

Freigabe von Speicher scheitert



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!

20.07.2013, 16:23
Beitrag #1

lupus022 Offline
LVF-Grünschnabel
*


Beiträge: 42
Registriert seit: May 2013

2012
-
DE



Freigabe von Speicher scheitert
Hallo,
wenn ich von LV in einer DLL Speicher dynamisch reservieren lasse, aus diesem etwas lese, und diesen danach mit einer Funktion der DLL wieder freigebe, verschwinden die angezeigten Daten (logisch), aber Labview stürzt sofort darauf ab. Wieso?
Konkret habe ich eine Funktion, die mir ein Array dynamisch erzeugt, und in dieses Werte hineinschreibt. Diese lese ich mit Labview aus, und will nach dem Auslesen bei Beendigung des VI den Speicher wieder freigeben. Das Array zeigt darauf nichts mehr an, und das VI stürzt ab.
Wie kann ich dann das Array freigeben, um kein Speicherleck zu erhalten?
Vielen Dank!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
22.07.2013, 08:40
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.427
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Freigabe von Speicher scheitert
Hallo lupus,

du hattest doch gerade erst eine längere Diskussion über den Umgang mit externen DLLs. Da wurde das doch auch schon besprochen!

Nicht, dass ich in dem Thema Experte wäre, aber die Stichworte MoveBlock & Speicherhandling fielen da schon...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
22.07.2013, 20:13
Beitrag #3

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Freigabe von Speicher scheitert
Deine Beschreibung ist recht dünn.
Wie schon im letzten Thread, ein Upload eine VIs + DLL wäre nicht schlecht.

Ein weiterer Ansatz: Verwende anstatt der XNodes einmal den direkten DLL-Aufruf "MoveBlock". Da bin ich mir sicher, dass die Daten wirklich kopiert werden, IMHO solltest du dann auf gar keinen Fall ein Speicher-Problem haben.

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
22.07.2013, 23:14
Beitrag #4

lupus022 Offline
LVF-Grünschnabel
*


Beiträge: 42
Registriert seit: May 2013

2012
-
DE



RE: Freigabe von Speicher scheitert
Ich habs lösen können, das Problem war offensichtlich, dass ich die externe Funktion zur Speicherfreigabe ohne Wartezeit aufgerufen habe, aber Labview anscheinend noch mit der Abarbeitung einiger anderer Programmteile nicht fertig war, die auf den nun nicht mehr existenten Speicher zugreifen wollten. Mit Wartezeit funktionierts nun.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
23.07.2013, 07:34 (Dieser Beitrag wurde zuletzt bearbeitet: 23.07.2013 07:34 von GerdW.)
Beitrag #5

GerdW Offline
______________
LVF-Team

Beiträge: 17.427
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Freigabe von Speicher scheitert
Hallo lupus,

mal so ganz allgemein: Wenn ein Programm(-teil) nur durch zusätzlich eingefügte Wartezeiten funktioniert, dann ist meistens (immer?) etwas faul...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
23.07.2013, 09:11 (Dieser Beitrag wurde zuletzt bearbeitet: 23.07.2013 09:12 von lupus022.)
Beitrag #6

lupus022 Offline
LVF-Grünschnabel
*


Beiträge: 42
Registriert seit: May 2013

2012
-
DE



RE: Freigabe von Speicher scheitert
Wie führt denn LV eigentlich das Programm aus? Parallel, oder sequentiell von links nach rechts? Sofern parallel, kann es ja durchaus passieren, dass ein Teil des Codes den Speicher bereits löscht, während ein anderer noch daraus zugreift, oder?
Aber ich hänge einfach mal das VI, das ich habe, als Anhang an, sofern noch mehr dieser Fehler auftreten.
Vielen Dank!


Angehängte Datei(en)
12.0 .vi  Raman_ptr.vi (Größe: 86,2 KB / Downloads: 169)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
23.07.2013, 09:14
Beitrag #7

GerdW Offline
______________
LVF-Team

Beiträge: 17.427
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Freigabe von Speicher scheitert
Hallo lupus,

Zitat:Wie führt denn LV eigentlich das Programm aus? Parallel, oder sequentiell von links nach rechts?
Schon mal den Begriff DATAFLOW gehört?
- Ein Programmteil wird ausgeführt, wenn alle nötigen Daten bereitstehen.
- Daten werden per Draht transportiert.
- Wenn zwischen Programmteilen keine Datenabhängigkeit besteht, werden sie (quasi) parallel abgearbeitet.
- Likns/Rechts und Oben/Unten sind relativ. Man kann einen Monitor auch drehen Big Grin

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
23.07.2013, 09:31
Beitrag #8

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Freigabe von Speicher scheitert
Autsch, das kann immer noch schief gehen, trotz Wait Funktion.
   
Du kannst überhaupt nicht vorhersagen, wann der "CleanUp" Aufruf ausgeführt wird. Der hängt einfach parallel zum Rest vom Code drinnen.
Die genaueren Hintergründe hat Gerd schon geschildert.
Sonicht

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
23.07.2013, 09:31
Beitrag #9

lupus022 Offline
LVF-Grünschnabel
*


Beiträge: 42
Registriert seit: May 2013

2012
-
DE



RE: Freigabe von Speicher scheitert
Aber das würde doch meine These stützen: Wenn ein Teil des Programmes noch auf Daten zugreift, die ein anderes Programm ohne Wartezeit sofort löscht, gibt es einen Crash. Und damit ist doch eine gewisse Wartezeit nötig, oder?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
23.07.2013, 09:34 (Dieser Beitrag wurde zuletzt bearbeitet: 23.07.2013 09:38 von GerdW.)
Beitrag #10

GerdW Offline
______________
LVF-Team

Beiträge: 17.427
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Freigabe von Speicher scheitert
Hallo lupus,

Zitat:Wenn ein Teil des Programmes noch auf Daten zugreift, die ein anderes Programm ohne Wartezeit sofort löscht, gibt es einen Crash
Symptombeobachtung: Korrekt.

Zitat:Und damit ist doch eine gewisse Wartezeit nötig, oder?
Analyse: Falsch.

Was du brauchst, ist DATAFLOW. Du musst eine explizite Abhängigkeit der Programmteile schaffen. Gern genutzt wird dafür ein ErrorCluster-Draht...

P.S.:
- Schön sind immer wieder Case-Strukturen, die vom Compiler wegoptimiert werden können. (TRUE-Konstante am Selektor)
- Schön auch die nicht-DATAFLOW-konforme "Wartezeit", die an dieser Stelle überhaupt nichts bringt, da sie parallel abgearbeitet wird...
THINK DATAFLOW!

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Gehe zu: