关于几种典型内存错误的问题及防护手段

最近了解到关于检测内存错误的利器: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、

原文地址:https://www.cnblogs.com/mic-chen/p/11295214.html