C++造成内存泄漏的原因汇总:

来源:互联网 发布:史书 知乎 编辑:程序博客网 时间:2024/04/29 04:30

一、程序循环new创建出来的对象没有及时的delete掉,导致了内存的泄露;
代码如下:

#include <iostream>#include <new.h>using namespace std;void out_of_memroy(){    cout << "ERROR:内存已耗尽!" << endl;}int main(){    set_new_handler(out_of_memroy);//注意参数传递的是函数的地址;    while(1)    {        new int[1000];    }    return 0;}

以上代码会在堆区疯狂的动态分配内存空间,导致系统内存耗尽时自动调用set_new_handler参数列表中的函数,打印出ERROR:内存已耗尽!如下图:
这里写图片描述

二、delete掉一个void*类型的指针,导致没有调用到对象的析构函数,析构的所有清理工作都没有去执行从而导致内存的泄露;
代码如下:

class Object {private:    void* data;    const int size;    const char id;public:    Object(int sz, char c):size(sz), id(c){    data = new char[size];    cout << "Object() " << id << " size = " << size << endl;    }    ~Object(){    cout << "~Object() " << id << endl;    delete []data;    }};

紧接着使我们的main函数:

int main() {Object* a = new Object(10, 'A');//Object*指针指向一个Object对象;void* b = new Object(20, 'B');//void*指针指向一个Object对象;delete a;//执行delete,编译器自动调用析构函数;delete b;//执行delete,编译器不会调用析构函数,导致data占用内存没有得到回收;cout << "Press any key to continue... ..." << endl;getchar();return 0;}

执行结果如下图:
这里写图片描述
从执行结果看到,并没有执行b指针(void*)所指对象的析构函数,所以delete一个void*的指针可能会造成内存上的泄露!

三、new创建了一组对象数组,内存回收的时候却只调用了delete而非delete []来处理,导致只有对象数组的第一个对象的析构函数得到执行并回收了内存占用,数组的其他对象所占内存得不到回收,导致内存泄露;
代码如下:

class Object1{    int a;    int b;};int main() {Object1* arry1 = new Object1[100];//创建包含100个Object1的对象数组arry1并返回数组首地址;Object1* arry2 = new Object1[100];//创建包含100个Object1的对象数组arry2并返回数组首地址;delete []arry1;//回收了数组arry1里的所有对象动态创建时占用的内存空间;delete  arry2;//回收了数组arry2里的第一个对象动态创建时占用的内存空间,导致其他99个对象的内存空间泄露;cout << "Press any key to continue... ..." << endl;getchar();return 0;}

四、未完待续… … ——Powered By Anonymous–V.

阅读全文
'); })();
1 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 糖水菠萝作品 糖水荷包蛋 糖耐喝糖水技巧 孕妇能喝姜糖水吗 玉米糖水做法 鸡蛋糖水 木瓜银耳糖水 雪耳雪梨糖水 银耳糖水 糖水鸡蛋 糖水冲鸡蛋 雪耳糖水 糖水不等式 木瓜糖水怎么做 木瓜糖水的做法大全 糖水的做法大全菜谱 雪耳木瓜糖水 糖水的做法大全 木瓜雪耳糖水的功效 木瓜雪耳糖水的做法 绿豆沙糖水的做法 香芋糖水 化州糖水的做法大全 广东糖水做法大全 糖水的做法 绿豆糖水的做法大全 红豆糖水的做法 糖水店名字大全 各种糖水的做法大全 港式糖水的做法大全 清补凉糖水的做法 西米糖水 开糖水店需要学会什么 什么糖水清热解毒下火 玉米糖水 正宗红豆沙糖水的做法 番薯糖水的做法 喝糖水 绿豆糖水的做法 糖水做法大全食谱 糖水制作配方