C语言中free()出错

来源:互联网 发布:手机浏览器看源码 编辑:程序博客网 时间:2024/05/21 22:46

这是今天碰到的一个例子,使用malloc()申请了一片内存,却在free的时候意外发现释放出错。我百思不得其解,因为同样申请内存的另一个变量释放内存的时候一点问题都没有,而且这两者操作基本相同,申请,使用,再释放。经过调试,发现程序一直没错,直到free的时候,程序直接终止。后来经过查free()的实现原理的时候,我找到了问题所在。free的原理是,申请的内存片段之前存放着相应的信息,这个信息是关于这个内存大小以及一些标志。如果在内存使用的时候,不经意间修改了这个信息的内容,就可能导致无法释放内存。而我的问题就是,申请的内存当数组用的时候,读写越界了,但是系统不会给我提示,于是不知道什么时候就把那个信息改写了,改写时不会有问题,但是到释放的时候,系统发现问题,直接异常,中断了程序。

由此得来的教训就是,C语言中访问数组一定要注意越界的问题!或者,使用Java吧,没有内存管理真的是方便省事好多

原创粉丝点击