Thread und "Detected memory leaks"
-
Hallo, Leute,
ich bin total verzweifelt! Ich möchte einem Thread einen Dialog übergeben und erhalte nach Beendigung des Programms folgende Meldung im Debug-Fenster:
Detected memory leaks!Zwar läuft das Programm einwandfrei, trotzdem möchte ich, dass das Programm perfekt wird. Kann mir irgendjemand weiterhelfen?
-
Stehen darunter auch noch die Quelltextzeilen, die die Memory Leaks verursacht haben?
Memory Leaks treten auf, wenn du Speicher allozierst, aber nicht wieder freigibst. Für jedes new/new[] muss ein passendes delete/delete[] vorhanden sein.
-
So lautet mein Code, der fehlerhaft sein muss. Wenn ich die Anweisung
delete pDlg;
hinzufügen würde, würde ja der gesamte Dialog gelöscht werden...
UINT WatchThread(LPVOID lParam) { char buffer[256]; CString szPrevDir; CString szCurrDir; CAccessWatchDlg *pDlg = (CAccessWatchDlg *)lParam; while (pDlg->m_bIsWatching) { // Evt. vorzeitiges Beenden if (WaitForSingleObject(g_exit, 0) == WAIT_OBJECT_0) return 1; // Derzeitigen Pfad erhalten GetCurrentDirectory(256, buffer); szCurrDir = buffer; // Vergleich mit vorigem Pfad if (szCurrDir != szPrevDir) { pDlg->m_ctrlListBox.AddString(GetTimeAsString() + szCurrDir); pDlg->m_ctrlListBox.SetCurSel(pDlg->m_ctrlListBox.GetCount() - 1); szPrevDir = szCurrDir; } } AfxEndThread(0); return 0; }
HINWEIS ZUR FUNKTION:
Es soll der derzeitige Pfad überwacht werden und bei Änderung in einer Liste angegeben werden. Der Thread wird beendet, wenn die Variable m_bIsWatching des übergebenen Dialogs FALSE wird. Bevor die Anwendung geschlossen wird, wird sie auf FALSE gesetzt und der Thread wird tatsächlich (ich finde ordentlich) beendet...
-
Mach mal das AfxEndThread raus, was soll das denn?
-
dEUs schrieb:
Mach mal das AfxEndThread raus, was soll das denn?
Also bei mir brauchte ich genau diese Zeile, sonst hat der Thread nicht alle Destruktor aufgerufen, seit ich dieses drinn hab klappt es viel besser.
Hatte vorher auch MemoryLeaks
-
Würde mich wundern, wenn dem so wär ...
Wie startet ihr denn den Thread? Mit AfxBeginThread?
-
Hat noch jemand eine Idee?
-
dEUs schrieb:
Würde mich wundern, wenn dem so wär ...
Wie startet ihr denn den Thread? Mit AfxBeginThread?Ja genau mit AfxBeginThread()
Warum ist das nach deiner Meinung nicht richtig?
Also bei läufts besser.
-
Weil man AfxEndThread erstens mal eigentlich garnicht verwenden sollte, da es zu brutal ist. Ausserdem ist der Thread nach dem return 0 sowieso zu Ende.