我正在寻找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");
}也许这是新手的问题,但我不知道我到底是在免费释放什么(临时工)。首先,我将当前的顶部分配给temp,然后将top更改为top ->next(前一个top被弹出),然后删除temp。那么使用临时程序有什么意义呢?
或者是什么东西写错了?
发布于 2014-04-10 23:00:41
使用temp的原因是您需要移除堆栈的顶部(您刚刚弹出的),但您也希望将顶部修改为以下元素。
为了做到这一点,您需要将旧的顶部存储在某处,更改顶部,然后删除最后一个顶部。
malloc()是冗余的和泄漏的内存,您对它不做任何操作,将它绑定到temp,但是在使用这个变量之前,您需要重新绑定到它的另一个地址。
作为一个经验法则,应该暗示你有一些错误-为什么你需要一个动态分配删除?虽然这并不总是错误的,但它确实暗示着要进行调查。
https://stackoverflow.com/questions/23000517
复制相似问题