malloc申请的内存,被两个指针引用,会报错!
代码
int *a =(int*) malloc(sizeof(int)*12);
int *b = a+1;
错误
malloc: *** error for object 0x1007000c8: incorrect checksum for freed object - object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug
我的理解
应该是a被free之后,b free发现已经free过了!
那该怎么解决呢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
你不手动调用free释放内存,编译器是不会帮你释放的啊,所以并不是多次释放冲突引起的问题。应该是某个指针调用free之后另外一个还在继续用,才造成的这个问题。找找哪里释放的这块地址,改到你a,b中最后一次使用的地方再调用。
使用shared_ptr, share_ptr是一个类, `它使用引用计数, 并且把指针的free操作放在析构函数内部;
,注意是要share_ptr不循环引用`就不会内存泄露, 也不会有double free的问题;
如果你贴出来的代码是你全部的代码的话,应该不会报异常的。
int *b = a+1;
这里只是创建一个指针引用一个地址,对你来说是只读的,你又没去写,一般不会异常。但是这种情况一般叫undefined behavior, 异常不异常,是由操作系统的上下文而定的。
找到问题了
代码如下
代码就是上面的,后来发现是
char** radio_base = (char**)malloc(sizeof(char*)*common_size);
写成了
char** radio_base = (char**)malloc(sizeof(char)*common_size);
应该属于数组越界的问题!本来应该是
common_size*4
的字节,因为少了个*,变成了common_size字节。radio_base[j]造成数组越界!但是提示也太奇葩了吧!