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
Danke, jetzt sind die 80 Fehler weg