c++ - 如何阻止这种内存泄漏
问题描述
我正在学习 C++ 中的指针,并且正在研究新功能和删除功能。我有一个在堆上分配内存的本地函数,但是因为我正在返回我创建的二维数组,所以我不明白如何解决这个内存泄漏,任何帮助将不胜感激
主文件
#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
我听说过智能指针,并计划在此之后了解它们,但现在我想知道是否有办法解决这个问题,还是我应该只使用智能指针?
解决方案
要解决这个问题,你需要delete
你想要new
的。
将代码更改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);
推荐阅读
- javascript - 在 Vue 中实现 @keypress
- reactjs - 流星从客户端检查用户角色
- r - 将字符向量的值分配给对象
- batch-file - Wget -P 在 Windows 下使用包含一些空格字符的路径
- database - 如何以编程方式从数据库中提取数据?
- ruby - 使用 Chef 获取和设置 DCOM 权限
- c# - 如何将验证码界面发送到 Windows 窗体?
- go - 管道多个命令然后写入文件
- google-cloud-platform - 谷歌云计算引擎 CPU 使用率显示 100%,但仪表板仅显示 10% 使用率
- linux - 相机捕捉在 Windows 和 Linux 上看起来不同