free(FILE*) - Invalid read of size 8

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

free(FILE) - Invalid read of size 8*
Meine snail funktioniert wunderbar, ich habe laut Valgrind auch keine Speicherlecks, jedoch werden mir einige Fehler wie

==2702== Invalid read of size 8
==2702==    at 0x4F65348: buffer_free (in /lib/x86_64-linux-gnu/libc-2.13.so)
==2702==    by 0x4F653C1: __libc_freeres (in /lib/x86_64-linux-gnu/libc-2.13.so)
==2702==    by 0x4A226EC: _vgnU_freeres (vg_preloaded.c:61)
==2702==    by 0x4E65D9D: __run_exit_handlers (exit.c:93)
==2702==    by 0x4E65E44: exit (exit.c:100)
==2702==    by 0x401684: main (snail.c:227)
==2702==  Address 0x51bcac8 is 168 bytes inside a block of size 568 free'd
==2702==    at 0x4C27D4E: free (vg_replace_malloc.c:427)
==2702==    by 0x401666: main (snail.c:224)

angezeigt.
Die folgenden Zeilen kommen meiner Meinung nach dafür in Frage:

40:         int sockout;
43:         sockout = socket(...);
48:         if(connect(sockout, ...) == 0) ...
64:         FILE* out = fdopen(sockout, "w");
224:        free(out);
227:        exit(EXIT_SUCCESS);

Die gleichen Fehlermeldungen werden auch für [m]FILE* in[/m] ausgegeben.

Sind diese Fehler relevant oder kann ich diese ohne Bedenken ignorieren?


Fehlermeldung genau lesen ist hier hilfreich: „inside a block of size 568 free’d“. Es wird beim Aufruf von [m]exit(3)[/m] etwas freigegeben, was schon freigegeben wurde (nämlich durch dein [m]free(3)[/m]). Das ist also ein Double-Free.

Du darfst [m]FILE[/m]-Pointer nicht mit [m]free(3)[/m] freigeben. Du musst sie mit [m]fclose(3)[/m] schließen (was auch automatisch ein [m]close(2)[/m]) macht.

Valgrind Fehler mit „invalid“ kann man eigentlich nie ignorieren …


Hab mir die Fehlermeldung schon genau durchgelesen, wusste nur nicht genau, wie sie zu interpretieren ist und konnte mit Google nichts finden bzw. habe nach dem falschen gesucht :wink:

Danke, jetzt sind die 80 Fehler weg :slight_smile: