Speicher wird nicht freigegeben
-
Ich spiel jetzt mal linker.
Hier findest du bestimmt auh was über Binren Speicher.
www.robsite.de
-
Also: Der Rückgabewert von FILEHANDLER::GetPathFromJobIni ist mit
delete [] mein_wert;freizugeben.
Wenn du kein Bock auf diese Speicherfreigabe hast, dann solltest du
TCHAR * cBuffer= new TCHAR[MAX_PATH];umwandeln in
static TCHAR cBuffer[MAX_PATH] = {0};
-
Okay danke

An welcher Stelle muss ich denn das delete anbringen? Nach dem return macht ja keinen Sinn.
-
Wenn Du einen Zeiger so returnierst in der aufrufenden Funktion, wo sonst?
Deshlab mach wie ich es gesagt habe. Übergib einen entsprechenden Zeiger auf einen TCHAR Array der Größe _MAX_PATH und gut ists!
-
Du rufst GetPathFromJobIni auf und wenn du den Rückgabewert nicht mehr brauchst, löschst du ihn; bspw.:
TCHAR *pszValue = GetPathFromJobIni (1, TRUE); ... // Mache irgendetwas mit pszValue ... delete [] pszValue;Martins Lösung ist typischer für die WinApi:
// Deklaration void GetPathFromJobIni (int i, BOOL bGetFromDone, TCHAR *pBuffer, int nMaxBuffer); // Aufrufen: TCHAR buffer[MAX_PATH] = {0}; GetPathFromJobIni (1, TRUE, buffer, MAX_PATH); ... // Mache irgendetwas mit buffer ...Dann entfernst du die Definition von "cBuffer" aus der Methode "GetPathFromJobIni" und ersetzt die restlichen "cBuffer" durch "pBuffer" (=> s. neue Übergabeargumente)
-
Okay vielen Dank soweit, ich werde morgen mal schauen, wie ich damit zurechtkomme!

-
Gut, das funktioniert soweit
Aber eine Frage habe ich noch: Wie kann ich ganze Instanzen von Klassen wieder freigeben?
-
Keine Idee?
Ich habe eine Klasse erstellt, die diverse Pointer enthält, die wieder freigegeben müssen. Ich würde aber gerne die gesamte Klasse freigeben, anstatt jeden Wert einzeln.
-
geht nicht
-
veryxRV schrieb:
Keine Idee?
Ich habe eine Klasse erstellt, die diverse Pointer enthält, die wieder freigegeben müssen. Ich würde aber gerne die gesamte Klasse freigeben, anstatt jeden Wert einzeln.
Schon mal was von einem Destruktor gehört?
Ansonsten muss man sehen was und wie Du das mit den Zeigern machst.
Also zeige und Code.
-
@veryxRV: std::auto_ptr, boost::scoped_ptr, boost::shared_ptr, ...