10 个内存引发的大坑,你能躲开几个?-LMLPHP

对程序员来说内存相关的 bug 排查难度几乎和多线程问题并驾齐驱,当程序出现运行异常时可能距离真正有 bug 的那行代码已经很远了,这就导致问题定位排查非常困难,这篇文章将总结涉及内存的一些经典 bug ,快来看看你知道几个,或者你的程序中现在有几个。。。


  1. 如果a的值作为指针指向代码区或者其它不可写区域,操作系统将立刻kill掉该进程,这是最好的情况,这时发现问题还不算很难

  2. 如果a的值作为指针指向栈区,那么此时恭喜你,其它函数的栈帧已经被破坏掉了,那么程序接下来的行为将脱离掌控,这样的 bug 极难定位

  3. 如果a的值作为指针指向堆区,那么此时也恭喜你,代码中动态分配的内存已经被你破坏掉了,那么程序接下来的行为同样脱离掌控,这样的bug也极难定位

  1. 如果 malloc 自己维护的内存够用,那么 malloc 从空闲内存中找到一块大小合适的返回,注意,这一块内存可能是之前用过后释放的。在这种情况下,这块内存包含了上次使用时留下的信息,因此不一定为0

  1. 指针a指向的那块内存释放后没有被 malloc 再次分配出去,那么此时a指向的值和之前一样

  2. 指针a指向的那块内存已经被 malloc分配出去了,此时a指向的内存可能已经被覆盖,那么*b得到的就是一个被覆盖掉的数据,这类问题可能要等程序运行很久才会发现,而且往往难以定位。

本文分享自微信公众号 - C语言与CPP编程(cwdushu)。
如有侵权,请联系 [email protected] 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

03-26 01:30