s->head 我需要协助解决内存泄漏的问题。请看一下下面的代码和截图。我很乐意回答任何额外的问题或澄清更多的问题:)
我的任务是构建一个堆栈数据结构(LIFO)。在这样做的过程中,我在释放堆内存方面遇到了一些问题,我的malloc。我使用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);
在赋值后面加上:
不过这和你的整个 "list "的实现有一点问题,因为你所拥有的并不是一个真正的list,而是一个简单的结构对象数组。你可以将相关的行替换为 stack_enqueue
与e.g:
s->head[s->count++].data = item;
然后完全不理会列表部分(本质上是删除了 next
的成员,以及所有的 "list "处理)。)
我想你误解了这个练习的目的。如果 s->head
是一个指针,它不应该被视为一个数组,而是一个指向列表中第一个节点的指针。
所以你会有一些类似于