c-链表删除导致空闲堆块....在…修改....在它被释放之后



我有一个链表,每当我试图释放根时,它都会导致标题中提到的错误。

自由堆块011B7EF8在其被释放后在011B7F38处被修改。

以下是创建代码:

if (root == NULL) {
root = (planet_type*)malloc(sizeof(planet_type));
/* Here I add data to the struct that root points to */
}

删除:

if (currentPlanet == root) {
root = currentPlanet->next;
free(currentPlanet);
}

其中currentPlanet是要删除的节点,并传递给删除函数,如下所示:

void deletePlanet(planet_type *currentPlanet)

如果我去掉"free(currentPlanet)"这一行,那么代码就可以工作了。

这不是全部代码。对于root之后的节点,程序按预期工作,删除过程相同。

确保在删除节点/元素时,在删除当前节点之前,将指针指向下一个节点。否则,删除当前指针后,您将无法再访问下一个指针,因为您将没有原始指针。

另外两件事:使用gdbvalgrind,这两个工具是所有C作业的最佳工具。

相关内容

  • 没有找到相关文章

最新更新