page contents

内存泄漏的场景有哪些?

轩辕小不懂 发布于 2022-01-08 10:49
阅读 653
收藏 0
分类:C/C++开发
  • c
  • c++
  • 2840
    Nen
    Nen
    - 程序员

    内存泄漏的场景: malloc和free未成对出现;new/new []和delete/delete []未成对出现; 在堆中创建对象分配内存,但未显式释放内存;比如,通过局部分配的内存,未在调用者函数体内释放:

    char* getMemory() {

        char *p = (char *)malloc(30);

        return p;

    }

    int main() {

        char *p = getMemory();

        return 0;

    }

    在构造函数中动态分配内存,但未在析构函数中正确释放内存;
    未定义拷贝构造函数或未重载赋值运算符,从而造成两次释放相同内存的做法;比如,类中包含指针成员变量,在未定义拷贝构造函数或未重载赋值运算符的情况下,编译器会调用默认的拷贝构造函数或赋值运算符,以逐个成员拷贝的方式来复制指针成员变量,使得两个对象包含指向同一内存空间的指针,那么在释放第一个对象时,析构函数释放该指针指向的内存空间,在释放第二个对象时,析构函数就会释放同一内存空间,这样的行为是错误的;
    没有将基类的析构函数定义为虚函数。

    判断和定位内存泄漏的方法:在Linux系统下,可以使用valgrind、mtrace等内存泄漏检测工具。
    请先 登录 后评论