c++ - 如何阻止这种内存泄漏

标签 c++ pointers memory-management memory-leaks

我正在学习 C++ 中的指针,并且正在研究新功能和删除功能。 我有一个在堆上分配内存的本地函数,但是因为我要返回我创建的二维数组,所以我不明白如何堵住这个内存泄漏,我们将不胜感激

主要.cpp

#include<iostream>
#include "integers.h"
using namespace std;
int main()
{
int i[]={1,2,3,4};
int n=sizeof(i)/sizeof(int);
cout<<n<<endl;
printint(genarr(i,n),n);
}

整数.cpp

#include<iostream>
using namespace std;
int** genarr(int* val,int n)
{
int i,j;
int **a=new int*[n];
for(i=0;i<n;i++)
a[i]=new int[n];

for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(i==j)
a[i][j]=val[i];

return a; // The variable that will leak but because i am returning it , how do stop it
}

void printint(int** a,int n){
for(int i=0;i<n;i++)
 {
  for(int j=0;j<n;j++)
   {
    cout<<a[i][j]<<" ";
   }
cout<<endl;
}
return ;
}

整数.h

int** genarr(int*val, int n);
void printint(int **a,int n);

编译者

g++ main.cpp integers.cpp -o integers

我听说过智能指针,并计划在这之后了解它们,但现在我想知道是否有办法解决这个问题,还是我应该直接使用智能指针?

最佳答案

要解决此问题,您需要删除的内容。

main 中的代码更改为:

int **arr = genarr(i,n);
printint(arr,n);
// we're done using arr; now we need to free it
for(int j=0;j<n;j++)
    delete[] arr[j];
delete[] arr;

您还可以扩展 integers.cpp 并添加一个 delarr 函数来补充 genarr:

void delarr(int **a, int n) {
    for (int i = 0; i < n; i++) {
        delete[] a[i];
    }
    delete[] a;
}

然后 main 变得简单:

int **arr = genarr(i,n);
printint(arr,n);
delarr(arr,n);

关于c++ - 如何阻止这种内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53139602/

相关文章:

ios - iOS 不会自动清除 ImageIO 脏内存

c++ - 将 cin 数据提取到适合的变量

访问预定义数组时代码崩溃

c - 运行函数的指针,其中变量是结构的变量

c - 在C中使用函数获取指针中变量的地址

c++ - 是否有不会隐式释放内存的 STL 分配器?

c - 指针 union 的动态分配 - C

c++ - 快板 5 + MinGW : Audio Addon Not Working

c++ - 同一地址的变量如何产生 2 个不同的值?

c++ - 如何分析 dyld 加载图像时调用初始化函数的时间?