Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

"double free or corruption" bez wcześniejszego zwalniania pamięci

Ostatnio zmodyfikowano 2020-09-19 21:14
Autor Wiadomość
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:
C/C++
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
P-177555
pekfos
» 2020-09-19 21:01:17
Ile to inputFileStat.st_size? Powinno mieć co najmniej rozmiar pliku + 1.
P-177556
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:
C/C++
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...
P-177557
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.
P-177558
kocotian
Temat założony przez niniejszego użytkownika
» 2020-09-19 21:14:56
Dzięki, zamykam
P-177559
« 1 »
  Strona 1 z 1