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
- malloc释放的想到的问题
- 由malloc等函数想到的一些问题
- malloc内存后的释放
- 由释放资源想到的一点
- 突然想到的问题
- 突然想到的问题!
- new/malloc的内存不释放
- 突然想到的seo问题
- 奇怪的malloc问题!
- malloc(0)的问题
- malloc(0)的问题
- malloc函数的问题
- malloc(0)的问题
- malloc(0)的问题
- malloc(0)的问题
- malloc(0)的问题
- DC释放的问题
- 内存的释放问题
- Win7 X64 vs2008 崩溃问题
- CentOS 鸟哥 第4-5章
- hdu 3032 Nim or not Nim? 博弈论,,,网上搜的题解让我大开眼界,原来还可以这样A题
- 协程的多线程切换
- 黑马程序员_Java的反射机制
- malloc释放的想到的问题
- Mysql跨表更新
- 什么是启耘BOX?
- eclipse快捷键
- Apache修改web根目录
- poj1087 floyd+二分图最大匹配
- 拜拜了,浮动布局-基于display:inline-block的列表布局
- Cocos2d-x中的核心类简介
- 【C#】 3. Vector数据类型(包含运算符重写)