Ich implementiere eine verkettete Liste in C. Nach dem Lesen der Kommentare habe ich aktualisiert und mehr Code zur Verfügung gestellt, die free() aufruft. Wenn ich den Code unten ausführen bekomme ich den folgenden Fehler "doppelt frei oder Korruption (fasttop):" Ich glaube fest daran, dass dies Free_list kommt, was wahrscheinlich falsch ist. Wenn ichDoppelte freie Korruption, was ist falsch in meiner Funktion free_list?
laufenvalgrind --leak-check = full --show-Leck-Arten = alle
Ich werde die folgende Fehlermeldung erhalten "total Heap-Nutzung: 4 Allocs, 7 frees, 64 Bytes zugewiesen"
list_t* xmalloc(size_t size){
list_t * t = malloc(size);
if(t == NULL){
fprintf(stderr, "out of memory\n");
}
return t;
}
/* a function new_list to create a new and empty list.*/
list_t* new_list(void){
list_t* stack;
stack = xmalloc(sizeof(list_t));
stack->value = NULL;
stack->succ = NULL;
return stack;
}
/* a function free_list to deallocate the list.*/
void free_list(list_t* head){
list_t* temp;
temp = head;
while(head->succ != NULL){
temp = head->succ;
head->succ = head->succ->succ;
free(temp);
}
free(head);
}
void insert_first(list_t* list, int* a){
list_t* t;
t = new_list();
t->value = a;
t->succ = list->succ;
list->succ = t;
free(t);
}
int top(list_t* stack){
if(stack->succ == NULL){
fprintf(stderr, "Empty\n");
}
return *stack->succ->value;
}
int main(void){
int a[3] = {1,2,3};
int i;
list_t* head1;
head1 = new_list();
for(i = 0; i < 3; i++){
insert_first(head1, &a[i]);
}
printf("Top1: %d\n", top(head1));
}
free_list(head1);
}
Es ist unmöglich zu sagen, wo das Problem liegt, da Sie nur einen Teil Ihres Programms gepostet haben. Bitte veröffentlichen Sie ein [minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve). –
Hat Valgrind Ihnen gesagt, dass etwas definitiv nicht erreichbar ist? Oder einfach nur erreichbar? Hast du Valgrind mit '--leak-check = full' ausgeführt? – Kaz
Mein Verständnis ist, dass 'Valgrind' Ihnen sagen wird, wo der Speicher zugewiesen wurde und nicht wo der Zeiger auf diesen Speicher verloren ging. Dieses Bit müssen Sie herausfinden, mit dem Debugger –