这是今天碰到的一个例子,使用malloc()申请了一片内存,却在free的时候意外发现释放出错。我百思不得其解,因为同样申请内存的另一个变量释放内存的时候一点问题都没有,而且这两者操作基本相同,申请,使用,再释放。经过调试,发现程序一直没错,直到free的时候,程序直接终止。后来经过查free()的实现原理的时候,我找到了问题所在。free的原理是,申请的内存片段之前存放着相应的信息,这个信息是关于这个内存大小以及一些标志。如果在内存使用的时候,不经意间修改了这个信息的内容,就可能导致无法释放内存。而我的问题就是,申请的内存当数组用的时候,读写越界了,但是系统不会给我提示,于是不知道什么时候就把那个信息改写了,改写时不会有问题,但是到释放的时候,系统发现问题,直接异常,中断了程序。
————————————————
版权声明:本文为CSDN博主「dahlwuyn」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/dahlwuyn/article/details/12778515
free出错
最新推荐文章于 2024-01-03 15:18:05 发布