zl程序教程

您现在的位置是:首页 >  后端

当前栏目

《从缺陷中学习C/C++》——6.12 二维数组的内存泄露

C++内存学习数组 泄露 二维 缺陷
2023-09-11 14:17:38 时间

本节书摘来自异步社区出版社《从缺陷中学习C/C++》一书中的第6章,第6.12节,作者: 刘新浙 , 刘玲 , 王超 , 李敬娜 , ,更多章节内容可以访问云栖社区“异步社区”公众号查看。

6.12 二维数组的内存泄露

从缺陷中学习C/C++
代码示例

int main()

 int **pVal = new int* [2];

 for(int i = 0; i i++){

 pVal[i] = new int[3];

 delete [] pVal;

 return 0;

现象 结果
二维数组的释放,没有将每个元素逐一释放,造成内存泄露。使用valgrind检测工具检测,可以得到类似的信息,LEAK SUMMARY: definitely lost: 24 bytes in 2 blocks。

Bug分析
泄露点在delete [] pVa,pVal是2*3的二维数组指针, delete[] pVal只释放了pVal所指向的行空间,没有释放每个pVal[i]所指向的列空间。

正确代码

int main()

 int **pVal = new int* [2];

 for(int i = 0;i i++)

 pVal[i] = new int[3];

 for(int j = 0; j j++)

 delete [] pVal[j];

 delete [] pVal;

 return 0; 

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。


Linux下几款C++程序中的内存泄露检查工具 Linux下几款C++程序中的内存泄露检查工具 Linux下编写C或者C++程序,有很多工具,但是主要编译器仍然是gcc和g++。最近用到STL中的List编程,为了检测写的代码是否会发现内存泄漏,了解了一下相关的知识。
C++使用VARIANT实现二维数组的操作 VARIANT变量是COM组件之间互相通信的重要的参数变量之一,它可以容纳多种不同的类型,如short、long、double等,包括各类指针和数组。组件之间的互相调用是比较耗时的,尤其带当组件位于不同进程中时,因此,减少传递次数是提高效率的一种有效方法。
C/C++ 二维数组 使用C语言用到了二维数组 1 #include 2 #include 3 using namespace std; 5 void print_arr_fun1(int arr[][3], int row){ 6 for (int i = 0; i row; ++i...
C/C++遍历二维数组,列优先(column-major)比行优先(row-major)慢,why? C/C++遍历二维数组,列优先(column-major)比行优先(row-major)慢,why? 简单粗暴的答案:存在Cache机制! 稍微啰嗦一点:CPU访问内存(读/写,遍历数组的话主要是读),不是每次都直接从内存上操作,而是先看Cache里是否有所指定地址的值! 这个问题,stackoverflow上有人问过的,结论是:CPU读取内存某地址处的值,并不是每次都去内存中取出来,有时候会从cache里读取。
C/C++ 程序越复杂,内存的管理显得越重要,稍有不慎就会出现泄漏。如果内存泄漏不是很严重,在短时间内对程序不会有太大影响,这也使得内存泄漏问题有很强的隐蔽性,不易被发现。然而不管内存泄漏多么轻微,当程序长时间运行时,其破坏力是惊人的 - 从性能下降到内存耗尽,甚至会影响其他程序的正常运行。
C++关于一个函数中new内存泄露的列子 首先明白几个基础 1、函数按值传递和按值返回的时候都会调用复制构造函数 2、一般在函数体内定义的栈变量是不能返回其地址或者引用给主调函数的,因为在函数结束的时候这些栈变量将释放 3、可以使用new的方式建立堆内存的方式,然后返回引用或者指针,因为new这种方式建立的堆内存并不随函数的结束而结束,      而指针变量释放但是指针本生的值已经返回。
c++ 动态分配二维数组 new 二维数组 #include stdafx.h #include using namespace std; int _tmain(int argc, _TCHAR* argv[]) //建立一个16行5列的数组 int **p = new int*[16];//分...
异步社区 异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。