首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简单堆栈,pop

简单堆栈,pop
EN

Stack Overflow用户
提问于 2014-04-10 22:54:09
回答 1查看 78关注 0票数 0

我正在寻找C中的简单堆栈实现,并发现了如下内容:

代码语言:javascript
复制
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。那么使用临时程序有什么意义呢?

或者是什么东西写错了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-10 23:00:41

使用temp的原因是您需要移除堆栈的顶部(您刚刚弹出的),但您也希望将顶部修改为以下元素。

为了做到这一点,您需要将旧的顶部存储在某处,更改顶部,然后删除最后一个顶部。

malloc()是冗余的和泄漏的内存,您对它不做任何操作,将它绑定到temp,但是在使用这个变量之前,您需要重新绑定到它的另一个地址。

作为一个经验法则,应该暗示你有一些错误-为什么你需要一个动态分配删除?虽然这并不总是错误的,但它确实暗示着要进行调查。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23000517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档