macOS上的分段错误,但Ubuntu上没有
我试图在我的代码中释放一个链接列表。当我尝试释放节点并打印该地址时,会出现分段错误。但如果我在Ubuntu上试用,它会正常工作。我的代码是这样的:macOS上的分段错误,但Ubuntu上没有,c,macos,ubuntu,segmentation-fault,C,Macos,Ubuntu,Segmentation Fault,我试图在我的代码中释放一个链接列表。当我尝试释放节点并打印该地址时,会出现分段错误。但如果我在Ubuntu上试用,它会正常工作。我的代码是这样的: void Free(struct node* head) { while(head !=NULL){ free(head); head=head->next; } } 我的结构是: struct node { int data; struct node* next; }; 为什么
void Free(struct node* head) {
while(head !=NULL){
free(head);
head=head->next;
}
}
我的结构是:
struct node {
int data;
struct node* next;
};
为什么它不能在macOS上工作?释放指针后,无法解除对它的引用。您需要先保存
head->next
,然后才能释放head
void Free(struct node* head) {
while(head !=NULL){
node *next = head->next;
free(head);
head=next;
}
}
释放指针后,不能解除对它的引用。您需要先保存
head->next
,然后才能释放head
void Free(struct node* head) {
while(head !=NULL){
node *next = head->next;
free(head);
head=next;
}
}
谢谢你的回答。我试过了,但它不起作用。我还想知道它在ubuntu中是如何工作的?有什么区别?如果你仍然有问题,那是因为你的代码中有其他的错误。您确定最后一个节点具有
next==NULL
?是的。我应该写下一个->下一个=NULL吗?不,你不需要,因为你正在释放它们。我想我在打印它时有问题。删除操作完成后,如果我不再次写入列表,它就会工作。但是当我试着写它的时候,我犯了一个错误。谢谢你的回答。我试过了,但是它不起作用。我还想知道它在ubuntu中是如何工作的?有什么区别?如果你仍然有问题,那是因为你的代码中有其他的错误。您确定最后一个节点具有next==NULL
?是的。我应该写下一个->下一个=NULL吗?不,你不需要,因为你正在释放它们。我想我在打印它时有问题。删除操作完成后,如果我不再次写入列表,它就会工作。但是当我试着写的时候,我犯了一个错误。