malloc释放的想到的问题

原因是这样的,在看我们的服务后台代码时,发现如下段代码有点意思:

 char *s = strdup(“xxxxx");   //拷贝一堆字符串
  while (char *token = strsep(&s, ","))
  {
    layers.push_back(atoi(token));
  }
  free(s);

strsep中针的位置会做改变,如果释放一个非头部的指针会怎样呢,之前没有考虑过,然后就做了个小测试,记录一下免得以后又忘了。

 

void main(){
 char *s;
 s=(char *)malloc(sizeof(char)*10);
 s++;
 free(s);
}
先任意分配一段空间,然后指针忘下指一下,然后释放,这样运行后会报错误。

如果s没有分配空间那样报错是可以理解的(因为释放了野指针),但现在分配了空间,而且malloc分配的是连续的空间,s+1的地址肯定也是知道的啊,为什么释放的时候会报错,free时只能释放malloc返回的头指针吗,而且free是怎么确定该释放多大的空间的?


拙见:
刚才百度了半天,觉得是malloc分配空间时不仅仅是返回了头指针,还记录了很多头部的细节,释放时能根据这些信息来释放,随便给一个指针会被当做野指针释放,最终肯定会报错的,至于malloc记录了哪些信息就不知道了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

六个沃德

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值