【发布时间】:2014-11-10 07:28:15
【问题描述】:
我对 c 有点陌生,并尝试使用单个链表来实现堆栈。为了实现 push() 和 pop() 函数,我传递了一个双指针。在 main 中,我将 Node *node_head 初始化为 NULL
我使用 malloc() 和 free() 成功处理内存泄漏,但似乎我无法弄清楚的某个地方存在内存泄漏。释放双指针时我应该采取不同的方法吗?谢谢,这是两个功能:
void stack_push(Node **node_head, int d)
{
Node *node_new = malloc(sizeof(Node));
node_new -> data = d;
node_new -> next = *node_head;
*node_head = node_new;
}
int stack_pop(Node **node_head)
{
Node *node_togo = *node_head;
int d = 0;
if(node_head)
{
d = node_togo -> data;
*node_head = node_togo -> next;
free(node_togo);
}
return d;
}
【问题讨论】:
-
您的代码不是有效的 C 代码。这些
**在函数定义应该是什么之后是什么?另外,请决定您想要 C 和 C++ 中的哪一个,它们不是同一种语言。 -
@MohitJain 会更具可读性,是的。但是
node_head和node_togo由于赋值是一样的。 -
@harper 这不是为了可读性,而是为了正确的逻辑。
node_head和node_togo不同,*node_head和node_togo不同。正如您已经在上面取消引用node_head一样,它保证为非 null 并且 if 条件将始终为真。 -
@ThunderGr 释放空指针无效。
-
@ThunderGr 将空指针传递给 free() 是完美的,因为不会发生任何操作。请参阅open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf 的第 7.20.3.2 节