我试图调用free函数来从链表中释放节点,但每当我尝试这样做时,IDE(CLion(就会停止程序并给我一个SIGTRAP(跟踪/断点陷阱(。
以下是链接列表:
struct node{
int score;
int index;
struct node* nextNode;
};
typedef struct node* List;
现在,初始化和链接列表的函数:
List list= malloc(sizeof(List));
list->index=-1;
list->score=-10;
list->next=NULL;
min++; min--;
List temp;
for(int i=sizeGrafi-1; i>0; i--){
temp= malloc(sizeof(List));
temp->index=i;
temp->score=-10;
temp->next=list;
nodiDaVisitare=temp;
}
下面是应该删除和释放节点的函数(为了避免无用的代码,我将只张贴要删除的节点是头的情况(:
List removeNode(List list){
Lista temp= malloc(sizeof(List));
temp=list;
list=list->next;
free(temp);
return list;
}
我试着查看类似的问题,但我找不到我的代码有什么问题。调用free函数时会发生崩溃。
编辑:我按照建议删除typedef
typedef struct node* List;
,将所有列表重写为Node*,Node定义为:
typedef struct node{
int punteggio;
int indice;
struct nodo* successivo;
}Node;
并在mallocs中使用正确的大小(即sizeof(Node((。现在函数free似乎没有任何问题。谢谢大家。
Lista temp= malloc(sizeof(List));
temp=list;
list=list->next;
malloc
内存,并将对它的引用存储在temp
中。然后用list
指定temp
。上一个值将丢失。
然后您尝试释放该指针,从而导致free
出现问题。
顺便说一句,这个功能毫无意义。很难理解你想要实现什么。
此外,永远不要将指针隐藏在typedef
s后面。