Speicher Leacks? Eine unmögliche Sache!
-
Hallo Leute,
Ich habe zwei Funktion:
void CaptureTableDescription( int index, TABLE_DESCRIPTION *pTableDescription ) { [...] // HIER KOMMT EIN LEAK FEHLER! pTableDescription->name.assign( tb_name ); [...] }
void CaptureTables() { for( int i=0; i < 16; i++ ) { TABLE_DESCRIPTION td; CaptureTableDescription( i, &td ); } }
Und ich kann mir einfach nicht vorstellen, warum an dieser Stelle ein leak-error kommt. Wenn die Zeile entfernt wird -> ist dieser weg!!
Ich benutze VC++ (MFC) mit teilweise ManagedC++. Soll ich die Nachrichten einfach ignorieren??
-
PS:
Detected memory leaks!
Dumping objects ->
{1377} normal block at 0x003BD648, 16 bytes long.
Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
{1342} normal block at 0x003BD5F8, 16 bytes long.
....
-
Vielleicht weil bei "assign" Speicher allokiert wird!? Und Du entweder "pTableDescription->name" oder "pTableDescription" nicht mehr freigibst...
-
Hm, naja TABLE_DESCRIPTION td; wird ganz normal deklariert. und Somit wird der destruktor automatishc aufgefunden.
name ist vom type std::string.
struct TABLE_DESCRIPTION { std::string name; };
-
Naja, er *würde* automatisch aufgerufen, wenn Du Ihn nicht via "new" allokiert hättest...
Weil sonst würdest Du ja via:pTableDescription.name.assign
zugreifen, oder?
PS: Und Du bist sicher, dass der Leak-Dump nicht *vor* dem destructor aufgerufen wird?
-
Also ich übergebe "pTableDescription" Als Pointer einer "normalen" variable. TABLE_DESCRIPTION wird nicht!! via new aufgerufen.
PS: Und Du bist sicher, dass der Leak-Dump nicht *vor* dem destructor aufgerufen wird?
was hätte das denn für eione Aussage? Ein Leak-Dump sollte doch global warten, ob evt. doch der Speicher wieder freigegeben wird.
Davon abgesehen klappt es nicht einmal wenn ich die Variable der Funktion:
void CaptureTableDescription( int index, TABLE_DESCRIPTION &pTableDescription ) { .. }
übergebe. Sobald ich std::string verändere wird ein Leak ausgegeben. Intressant ist auch, dass ich in der Struktur auch integer werte setze, die kein Leak verursachen.
-
Du machst das ganze aber nicht über EXE/DLL-Grenzen hinweg, oder? Bzw. Du verwendest sonst keine EXE/DLLs, welche diese Struktur noch verwendet, oder?
-
Naja, ich habe eine MFC Anwendung. Dort rufe ich diese FUnktionen auf. (eig. recht simple)
-
Könnte das evt. an der Einstellung "MFC Shared DLL " liegen?
-
Ohne mehr Infos kann ich leider nichts dazu sagen... oder mail mir doch mal das Projekt...