【发布时间】:2018-11-04 10:02:01
【问题描述】:
我正在学习 C++ 中的指针,并且正在研究新功能和删除功能。 我有一个在堆上分配内存的本地函数,但是因为我正在返回我创建的二维数组,所以我不明白如何解决这个内存泄漏,任何帮助将不胜感激
main.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
我听说过智能指针,并计划在此之后了解它们,但现在我想知道是否有办法解决这个问题,或者我应该只使用智能指针吗?
【问题讨论】:
-
我的建议是你根本不要使用指针,而是使用
std::vector(或者对于编译时固定数组使用std::array)。 -
只需将变量“a”设为全局变量
-
@Someprogrammerdude 是我的方法不是标准做法还是存在一些固有问题?我现在正在学习指针,不想使用向量。
-
@akshay 不,全局变量几乎从不解决任何问题。全局变量通常不好。
-
@akshay - 请将这个糟糕的建议放在答案部分,可能会被相应地否决。还是您故意规避 SO 的质量控制?
标签: c++ pointers memory-management memory-leaks