Ich lasse valgrind laufen, um nach Speicherlecks zu suchen. Ich habe zwei globale Variablen in der Hauptfunktion zugewiesen; dann, am Ende von main
Ich gebe beides frei, aber Valgrind schreibt weiter:
==18311== 16 bytes in 1 blocks are definitely lost in loss record 1 of 2
==18311== at 0x4025BD3: malloc (vg_replace_malloc.c:236)
==18311== by 0x804A30C: main (application.c:730)
==18311==
==18311== 16 bytes in 1 blocks are definitely lost in loss record 2 of 2
==18311== at 0x4025BD3: malloc (vg_replace_malloc.c:236)
==18311== by 0x804A31D: main (application.c:731)
Zusammenfassung des Lecks:
==18311== LEAK SUMMARY:
==18311== definitely lost: 32 bytes in 2 blocks
==18311== indirectly lost: 0 bytes in 0 blocks
==18311== possibly lost: 0 bytes in 0 blocks
==18311== still reachable: 0 bytes in 0 blocks
==18311== suppressed: 0 bytes in 0 blocks
Warum kann ich diese beiden Variablen nicht freigeben?
Modifier
someList *something; *something_else;
Die verwendete Struktur hat zwei Felder vom Typ char *
und ein Feld someList *next
. Später gibt es eine Menge Code. Einige Threads werden mit Hilfe dieser beiden Variablen Objekte hinzufügen/bearbeiten/löschen.
something -> object 1 -> ... -> object n
something_else -> object 1 -> ... -> object m
Où ->
bedeutet, dass something->next = object 1
und object k
sind alle Instanzen von someList *
.
Gegen Ende der Anwendung habe ich jedes Feld der einzelnen object k
Element. Dann, im letzten Teil:
free(something);
free(something_else);
Es ist möglich, dass ich vergessen habe, ein Feld eines Objekts freizugeben. Kann dies das Verhalten verursachen, das ich hier habe?
Ich hoffe, das ist jetzt klarer.