"double free or corruption" bez wcześniejszego zwalniania pamięci
Ostatnio zmodyfikowano 2020-09-19 21:14
kocotian Temat założony przez niniejszego użytkownika |
"double free or corruption" bez wcześniejszego zwalniania pamięci » 2020-09-19 20:54:57 Witam serdecznie, mam taki oto kod: struct stat inputFileStat; FILE * inputFile; char * inputFileContent;
inputFileContent = malloc( inputFileStat.st_size ); char tmpBuffer[ MAX_LINE_SIZE ]; while( fgets( tmpBuffer, sizeof( tmpBuffer ), inputFile ) != NULL ) strcat( inputFileContent, tmpBuffer );
printf( "%s", inputFileContent ); free( inputFileContent );
Pamięć jest alokowana poprawnie, wszystko działa jak należy, zawartość pliku wychodzi na ekran, pamięć nie jest w żaden sposób zwalniana, jednak mimo wszystko po wykonaniu printf dostaję taki komunikat: <zawartość pliku> double free or corruption (!prev) zsh: abort (core dumped)
W czym może leżeć problem? Pozdrawiam |
|
pekfos |
» 2020-09-19 21:01:17 Ile to inputFileStat.st_size? Powinno mieć co najmniej rozmiar pliku + 1. |
|
kocotian Temat założony przez niniejszego użytkownika |
» 2020-09-19 21:06:51 Po dodaniu jedynki działa. inputFileStat.st_size to rozmiar pliku wejściowego, pobrany z wykonanego przedtem stat'a: if( stat( argv[ 1 ], & inputFileStat ) ) { fprintf( stderr, "fatal error: cannot stat on %s file\n", argv[ 1 ] ); return 1; }
Chociaż to moim zdaniem trochę dziwne, bo gdy plik ma 1 znak, to stat zwracał mi 2, analogicznie gdy plik miał znaków 7, to stat zwracał 8, więc wydawało mi się, że uwzględnił null na końcu... |
|
pekfos |
» 2020-09-19 21:11:11 Ta wartość jest wyrażona w bajtach, nie znakach. Możesz mieć przypadek gdzie te wartości są równe, ale zwykle liczba bajtów będzie większa. |
|
kocotian Temat założony przez niniejszego użytkownika |
» 2020-09-19 21:14:56 Dzięki, zamykam |
|
« 1 » |