关于弹栈函数

关于弹栈函数

//4.出栈pop
data_t pop_linkstack(linkstack_t *s)
{
    linknode_t *temp = NULL;
    data_t data;

    //1.保存删除结点(原栈顶元素)首地址,
    temp = s->top;
    //2.取出删除结点数据,
    data = temp->data;
    //3.更新top指针,用删除结点的指针域更新
    s->top = temp->next;
    //4.释放删除结点空间
    free(temp);
    temp = NULL;
    //5.更新n
    s->n--;

    //6.返回出栈元素的值
    return data;
}

temp是在栈空间存储的,到最后也可以使用free()函数释放空间吗?


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
山行老师 2022-09-24 13:25:44
temp指向的栈顶节点在堆区,free掉temp指针实际是free堆区一个节点的内存。
  • 提问者 我想跑路 #1

    是不是相当于通过free局部变量,free掉了全局变量

    2022-09-24 13:32:23
  • 山行老师 回复 提问者 我想跑路 #2

    1)不要这样理解,C语言不是对象型语言,没有引用得概念;
    2)temp是个指针,是个地址,free去释放这个地址(这个地址是指堆区空间);
    3)没有free掉全局变量这种说法,只有free堆区空间这种说法;

    2022-11-02 21:44:58
  • 提问者 我想跑路 回复 山行老师 #3

    好的明白,谢谢老师

    2022-11-02 22:05:01
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师