这里是我的流行代码:)无法在我的弹出功能中释放/释放空间?
int pop (struct_of_ints *head_node){
int val;
if (head_node == NULL){
fprintf(stderr, "Empty stack.\n");
return -1;
}
else {
struct_of_ints *curr;
struct_of_ints *prev;
curr = head_node;
prev = NULL;
while (curr->next != NULL) {
prev = curr;
curr = curr->next;
}
val = curr->value;
if (prev == NULL)
head_node = NULL;
else
prev->next = curr->next;
free(curr)
return val;
}
}
当我尝试释放(CURR),但是,我得到一个分段错误,当我跑Valgrind的,我得到“无效免费(信息/删除/删除[]“,”地址0x51c1f60在一个大小为32的块中是16个字节“以及”大小为8的无效读取“......我不知道有什么问题。如果有人能帮助我会很感激。谢谢!
我建议你使用双链表来代替尾指针。如果你想从尾部移除,会使生活变得更简单。或者,如果你实现了一个堆栈,只需在头上按/弹出即可。 – 2013-04-23 03:05:37
用'-g'标志编译代码,运行'gdb'来检查你的错误。 – MYMNeo 2013-04-23 03:09:22