Die folgende load
-Funktion versucht, den Inhalt der Datei mit Zeiger file
zu laden und den Speicherort unter content
und Länge in length
zu speichern. Der Code funktioniert gut, aber Valgrind zeigt den Fehler "ungültiges Schreiben bei Freed" und mehrere Speicherverluste bei der Verwendung von realloc
.Valgrind zeigt "ungültiges Schreiben der Größe 4 bei fread" und Speicherlecks
Es folgt der Code:
bool load(FILE* file, BYTE** content, size_t* length) {
// providing default values to content and length
*content = NULL;
*length = 0;
// initializing buffer to hold file data
int size = 512;
BYTE* buffer = NULL;
buffer = malloc(size);
if(buffer == NULL)
return false;
// bytes_read will store bytes read at a time
int bytes_read = 0;
// reading 512 bytes at a time and incrmenting writing location by 512
// reading stops if less than 512 bytes read
while((bytes_read = fread(buffer + size - 512 , 1, 512, file)) == 512)
{
//increasing the size of
size = size + 512;
if(realloc(buffer,size) == NULL)
{
free(buffer);
return false;
}
}
// undoing final increment of 512 and increasing the size by bytes_read on last iteration
size = size - 512 + bytes_read;
// triming buffer to minimum size
if(size > 0)
{
BYTE* minimal_buffer = malloc(size + 1);
memcpy(minimal_buffer, buffer, size);
minimal_buffer[size] = '\0';
free(buffer);
*content = minimal_buffer;
*length = size;
return true;
}
return false;
}