free内存的时候出错,求帮助

C语言 码拜 8年前 (2016-05-25) 1030次浏览
    int     *pi = malloc(sizeof(int));
*pi=100;
*(pi+1)=101;
free( pi );  //出错
问一下,这里free的时候,为什么会出错?谢谢
解决方案

5

其实电脑开机后物理内存的每个字节都是可读写的,从来不会原因是所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时能否能发现并能否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。

5

引用:
Quote: 引用:

倒数第2行访问越界了。

本人在上面回复了,帮忙一起看下。

这里有讲。
http://blog.csdn.net/yupei881027/article/details/42673343

10

越界访问了
改成 int     *pi = malloc(sizeof(int)*2); 可正常

10

你申请了4个字节,实际占用的空间当然是大于4字节的,它需要放内存管理信息,调试信息这些。
不然你free的时候它怎么能知道到底释放多大?

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明free内存的时候出错,求帮助
喜欢 (0)
[1034331897@qq.com]
分享 (0)