mtrace
-
hi,
ich habe ein für mich sehr nützliches tool gefunden um nicht wieder freigegebene speicherstellen zu finden - die meisten werden es bestimmt schon kennen - mtrace. es funktioniert wunderbar, es gibt mir sogar die zeilennummer aus. allerdings bekomm ich immer diese meldung:
mtrace test mlog - 0x0804c008 Free 462 was never alloc'd 0xb7de1327 No memory leaks.
So wie ich das sehe hab ich keinmal free() vergessen oder? Was bedeutet aber die erste Zeile 0x0804c008 Free 462 was never alloc'd 0xb7de1327 - das wird nicht von mir verursacht oder?
mfg blan
-
Wenn mtrace dir so eine Meldung liefert, sollte dein Programm eigentlich geschmeidig abschmieren. Du versuchst nämlich einen Pointer freizugeben, für den gar kein Speicher (dynamisch) allokiert wurde.
-
free() geht auch bei NULL zum Beispiel, das heißt, es würde keinen Fehler geben (afaik)
-
Vorden schrieb:
free() geht auch bei NULL zum Beispiel, das heißt, es würde keinen Fehler geben (afaik)
indeed.
free(NULL)
is ok, aber im obigen beispiel handelt es sich umfree(0xb7de1327)
und das is nich ok.
-
also so wie ich das jetzt sehe liegt diese meldung nicht an meinem programm. sobald ich nicht mehr gegen die libgcrypt linke kommt der fehler nicht mehr - scheinbar haben die dort ein fehler oder ich hab die library nicht richtig initialisiert / freigegeben. wobei die funktionen der library einwandfrei funktionieren.
mfg blan
-
wenn mtrace das nicht anzeigt, solltest du valgrind verwenden. das zeigt es dir fix an: http://www.valgrind.org/. versichere dich am besten, ob du die libgcrypt richtig verwendest. oft sind vermeintliche speicherlecks in bibliotheken anderer eine vergessene "clean-up-funktion" der lib, die man im programm aufrufen muss. solltest du dir sicher sein, dann poste einen bugreport für die libgcrypt.