So habe ich diese Funktion:malloc Fehler: Falsche Prüfsumme für befreites Objekt in struct für Datei zu lesen
source_t * source_init(char * argsource)
{
source_t * temp = (source_t *) malloc(sizeof(source_t *));
temp->path = realpath(argsource, NULL);
temp->dir = dirname(temp->path);
temp->name = basename(temp->path);
temp->ext = strrchr(temp->name, '.');
temp->content = read_file(temp->path); // here
temp->error = error_free();
return temp;
}
Es ruft Funktion read_file()
:
char * read_file(char * sourcepath)
{
char * buffer = NULL;
long string_size, read_size;
FILE * file = fopen(sourcepath, "r");
fseek(file, 0, SEEK_END);
string_size = ftell(file);
rewind(file);
buffer = (char *) malloc(sizeof(char) * (string_size + 1));
read_size = fread(buffer, sizeof(char), string_size, file);
buffer[string_size] = '\0';
if (string_size != read_size)
{
free(buffer);
buffer = NULL;
}
fclose(file);
return buffer;
}
und diese Fehler aufkommt : malloc: *** error for object 0x7faf08402698: incorrect checksum for freed object - object was probably modified after being freed.
Also meine derzeitige Lösung ist es, content
separat zu initialisieren, nachdem ich source_init()
in der Hauptsache aufgerufen habe Funktion. Obwohl diese Lösung funktioniert, möchte ich content
in source_init()
initialisiert werden. Auch scheint es, ich kann source_init()
nicht direkt anrufen, um content
zu initialisieren, weil der gleiche Fehler auftaucht, so muss ich einen Puffer erstellen, um source_init()
aufzurufen und content
zu initialisieren, um zu puffern.
Ein weiterer Grund neben der Wartbarkeit, die Form 'source_t * temp = malloc (sizeof (* temp)) zu verwenden;' –