C语言 内存泄漏(堆栈/链表数据结构)



不言自明。我需要帮助解决内存泄漏问题。请查看下面的代码和屏幕截图。我很乐意回答任何其他问题或澄清更多:)

我的任务是构建堆栈数据结构(LIFO(。在这样做时,我在释放我恶意的堆内存时遇到了一些麻烦。我使用 mystack.h 作为头文件,并使用 main.c 来测试我的程序。两者都是要求。V.Imp:我不允许更改任何函数的签名。

stack_enqueue函数中,你有这两行:

node_t *n = (node_t*)malloc(sizeof(node_t));
s->head[s->count++] = *n;

第一行动态分配内存。第二行从n指向的位置复制。然后,您只需丢弃指针n及其指向的内存即可。这确实是内存泄漏。

简单的解决方案是添加:

free(n);

作业后。

不过,这个和你的整个"列表"实现有一个小问题,因为你拥有的并不是一个真正的列表,而是一个简单的结构对象数组。您可以将相关的stack_enqueue行替换为例如:

s->head[s->count++].data = item;

然后根本不打扰列表部分(基本上删除结构的next成员,以及所有"列表"处理(。


我想你误解了练习的目的。如果s->head是一个指针,则不应将其视为数组,而应将其视为指向列表第一个节点的指针。

所以你会有类似的东西

+---------+ +------------+ +-------------+ +
-----------+ |S->头 |-> |第一个节点 |-> |第二个节点 |-> ... -> |最后一个节点 |--> 空 +---------

+ +------------+ +-------------+ +-----------+也就是说,s->head指向第一个节点。第一个节点next指针指向第二个节点,依此类推。

在当前代码中根本没有这样的节点链接。

如果你在理解链表方面遇到困难,你的教科书应该有关于它的信息,你的班级也应该提出来。而且在更大的互联网上必须有数百万种关于如何实现手柄列表的资源。

最新更新