链接列表删除导致Free Heap块........在........在被释放后修改

时间:2014-02-11 14:56:05

标签: c linked-list malloc heap

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

自由堆块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之后的节点,程序按预期工作,删除过程相同。

1 个答案:

答案 0 :(得分:0)

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

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