freizugeben Ich verwende eine Funktion, die eine bestimmte Anzahl von Bytes vom Benutzer reserviert, und dann habe ich eine andere Funktion, die den Speicher freigeben soll, die zugewiesen wurde. Das Speichersegment dient als Pool, der x Listenknoten gleicher Größe enthält.Fehler beim Versuch, eine vorherige malloc
Anfangs Funktion:
void create_mem(int mem_size, int num_n){
number_of_nodes = num_n;
mem_block = malloc(mem_size);
header = mem_block;
}
Die Header-Datei hat number_of_nodes, Kopf- und mem_block als int, list_node * und char * sind.
Ich habe auch eine list_node Struktur in der Header-Datei:
typedef struct list_node {
list_node* next;
}list_node;
Die Löschfunktion:
void delete_mem(){
free(mem_block);
}
Die Liste funktioniert und mein Code enthält insert_nodes und delete_nodes, die gut funktionieren, aber wenn mein main ruft die Funktion delete_mem auf, mein Programm stürzt ab.
Wenn ich die delete_mem Funktion geändert:
void delete_mem(){
mem_block = NULL;
free(mem_block);
}
bekomme ich keine Fehler
, aber ich glaube nicht, das tatsächlich löschen Funktion tut, was ich will es tun.Ich glaube, ich muss alles löschen, das in diesem ursprünglichen mem_block ist, bevor ich versuche, den Speicher freizugeben, aber ich bin mir nicht sicher, wie ich das machen soll.
Nicht genügend Informationen. Bitte poste ein [mcve]. – kaylum
Offensichtlich, wenn Sie 'mem_block = NULL' zuweisen, dann ist das folgende' free() 'äquivalent zu' free (NULL) ', was nichts tut. –
Beste Vermutung: Irgendwo (sonst) vergeben Sie einen neuen Wert für 'mem_block', so dass, wenn Sie versuchen, es freizugeben, sein Wert nicht mehr der Wert ist, der von' malloc() 'empfangen wurde. –