Mic_chen

It is not the strongest of the species that survive, nor the most intelligent, but the one most responsive to change

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

最近了解到关于检测内存错误的利器:purify、Boundschecker、Valgrind。有种相见恨晚的感觉,于是就顺便总结下最近遇到的几类内存错误问题。

1、上层模块的程序员对下层模块的内存使用生命周期不清晰,导致野指针的出现。

      为了减少数据拷贝,有些底层模块设计一些接口的时候需要上层申请内存传入。上层模块的程序员对这些接口的重视不足,不清楚内存的生命周期,以为调用完该接口以后就可以释放。

      这个时候刚刚传入给底层模块的指针就变成了野指针。底层模块对内存的后续读写都是非法的。

     示例

     下层模块B:moduleB_packet(void *p)

     上层模块A:moduleA_packet(void *p) {

                              pdata = malloc(1024);

                              moduleB_packet(pdata); // 模块B内部没有做数据拷贝

                              free(pdata); // 模块B还在访问 pdata;

                          }

 

2、

 

posted on 2019-08-03 16:17  Mic_chen  阅读(163)  评论(0编辑  收藏  举报