内存泄漏(StackLinked List数据结构)

问题描述 投票:0回答:1

s->head 我需要协助解决内存泄漏的问题。请看一下下面的代码和截图。我很乐意回答任何额外的问题或澄清更多的问题:)

我的任务是构建一个堆栈数据结构(LIFO)。在这样做的过程中,我在释放堆内存方面遇到了一些问题,我的malloc。我使用mystack.h作为头文件,并使用main.c来测试我的程序。两者都是需求。V.Imp:我不允许改变任何函数的签名。

c memory memory-leaks stack heap-memory
1个回答
2
投票

stack_enqueue 函数有两行。

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

第一行是动态分配内存。第二行从 n 是指向性的。然后你就可以简单地丢弃这个指针 n 以及它所指向的内存。这确实是内存泄漏。

简单的解决方法是在赋值后添加。

free(n);

在赋值后面加上:

不过这和你的整个 "list "的实现有一点问题,因为你所拥有的并不是一个真正的list,而是一个简单的结构对象数组。你可以将相关的行替换为 stack_enqueue 与e.g:

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

然后完全不理会列表部分(本质上是删除了 next 的成员,以及所有的 "list "处理)。)


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

所以你会有一些类似于

© www.soinside.com 2019 - 2024. All rights reserved.