Ich habe versucht, das Mallocieren und Freigeben von Speicher zu üben, habe jedoch die Funktion free () in diesem Programm ausgeführt Für einen ungültigen Zeiger wird ein Fehler zurückgegeben. Kann mir jemand sagen, was ich falsch mache?

Hier ist der Fehler: * Fehler in `. / malloc1 „: free (): ungültiger Zeiger: 0x000000000216c421 * Abgebrochen

Und hier ist mein Code:

include

include

int main (void) {// öffne eine alte Datei FILE * old_file = fopen („words.txt“, „r“); if (old_file == NULL) { printf („Keine Datei gefunden.“); Rückgabe 1;}

//open a new file FILE* new_file = fopen("new_words.txt", "w"); if (new_file == NULL) { printf("Unable to create file."); return 2; } for (int i = 0; i < 21; i++) { char* storage = malloc(sizeof(char)); if (storage == NULL) { printf("Error."); return 3; } fread(&storage, sizeof(char), 1, old_file); fwrite(&storage, sizeof(char), 1, new_file); free(storage); } //close both files fclose(old_file); fclose(new_file); 

}

Antwort

Das Problem liegt in fread(&storage, sizeof(char), 1, old_file); In dieser Zeile werden die direkt im Zeiger gelesenen Daten gespeichert und die Adresse des malloc „d-Speichers überschrieben. Die Daten werden nicht in dem Speicher gespeichert, auf den die im Zeiger gespeicherte Adresse zeigt. Wenn der Aufruf von free () ausgeführt wird, wird versucht, eine ungültige Adresse freizugeben. Es entsteht auch ein Speicherverlust, da die Adresse des malloc „d-Speichers ersetzt wird. Entfernen Sie die & von fread () und fwrite (), und es wird funktionieren.

Wenn dies Ihre Frage beantwortet, klicken Sie bitte auf das Häkchen, um zu akzeptieren. Lassen Sie uns über die Forum-Wartung auf dem Laufenden bleiben. 😉

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.