mmh_Wall 2022-04-09 12:01 采纳率: 60%
浏览 46
已结题

栈的摧毁中 free释放掉的是什么?为什么释放一个指针后,依旧可以通过自加来找到下一个指针?

代码如下:


//摧毁栈
DestroyStack(sqStack *s)
{
    int i;
    for(i=1;i<=stacksize,i++)
    {
        free(s->base);//这里释放掉的是什么?(*(s->base)为int型)
        s->base++;
    }
    s->base=s->top=NULL;
    s->stacksize=0;
}

看了很多关于free的文章,大致的理解为:
1.通过malloc函数向系统申请空间后,系统会将一块大小符合要求的空间圈起来;
2.如果你free掉了这一块空间例如:free掉s->base,会将这块s->所指向的空间的边界去掉,即将这块空间还给系统;
3.此时这块空间还存在free之前的值,指向该空间的指针依旧为原来的地址,但无法通过指针的取值提取出来,即*(s->base)不合法;

根据上述理解和现实操作的冲突,我有以下问题:
1.free指针前,他的空间为int型(4字节),那么这里的s->base+1指指向下一元素即下一个int型的指针,暂时叫这个值为t,既然是这样,那么将s->base释放后,s->base++是否应该指向该指针下一字节,即想要得到t的指针,应该将s->base自加四次;但实际操作中,只需要自加一次,这与我的理解冲突,但暂时还没有找到问题所在。

  • 写回答

1条回答 默认 最新

  • [PE]经典八炮 2022-04-09 14:38
    关注

    指针的加减跟它所指向的内存没有任何关系,如果指针是int型的那么它加一就是加四个字节,哪怕指向一个char类型的内存也会这样操作,而你free之后指针类型又没有改变,所以还是移动四个字节

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 4月17日
  • 已采纳回答 4月9日
  • 创建了问题 4月9日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效