【发布时间】:2014-04-10 22:54:09
【问题描述】:
我一直在寻找 C 中的简单堆栈实现,并找到了类似的东西:
void pop(struct stack **top)
{
struct stack *temp;
temp = malloc(sizeof(struct stack));
if(*top != NULL)
{
printf("%d popped.\n",(*top)->data);
temp = (*top);
(*top) = (*top)->prev;
free(temp);
}
else
printf("Stack is empty.\n");
}
可能这是新手问题,但我不确定我通过 free(temp) 释放了什么。 似乎首先我将当前顶部分配给临时,然后将顶部更改为顶部->下一个(弹出上一个顶部),然后删除临时。那么使用 temp 有什么意义呢?
还是写错了?
【问题讨论】:
-
我的 C 生锈了,但这段代码似乎在泄露内存。你在哪里找到的?
-
malloc和free在这里是不必要的(并且泄漏的)。temp应该是一个局部变量。 -
@ooga 很确定
free()应该保留,它应该删除您刚刚弹出的堆栈的头部。temp是完全冗余和泄漏的。 -
@amit,对,我现在明白了。