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


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

  • 相关阅读:
    python2和python3的区别
    开发常用命令
    类中的内置方法
    while 循环
    sql执行效率,explain 查询执行效率
    jmeter 中的 HTTP URL Re-writing Modifier
    jmeter beanshell内容
    jmeter 和 ajax
    jdbc 与 each controller 对多条查询结果的处理
    jdbc与 Beanshell PostProcessor 对多条结果的处理
  • 原文地址:https://www.cnblogs.com/mic-chen/p/11295214.html
Copyright © 2020-2023  润新知