我在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-> next(弹出上一个顶部),然后删除temp。那么使用temp有什么意义呢?
或许某些事情写错了?
答案 0 :(得分:3)
使用temp
的原因是因为您需要删除堆栈的顶部(刚刚弹出的堆栈),但您还想将顶部修改为以下元素。
为了做到这一点,你需要将旧的顶部存储在某处,更改顶部,然后删除最后一个顶部。
malloc()
是冗余和泄漏的内存,你什么都不做,你绑定它到temp
,但在使用这个变量之前,你重新绑定一个不同的地址它
根据经验,应该暗示你出现了问题 - 为什么在删除时需要动态分配?虽然并非总是错误,但它确实暗示了调查。