c-自由函数激活断点



我试图调用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出现问题。

顺便说一句,这个功能毫无意义。很难理解你想要实现什么。

此外,永远不要将指针隐藏在typedefs后面。

相关内容

  • 没有找到相关文章

最新更新