malloc释放的想到的问题

来源:互联网 发布:p2psearcher百度软件 编辑:程序博客网 时间:2024/06/07 15:59

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

 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
原创粉丝点击