Я изучаю указатели на C ++ и работаю над новыми функциями и функциями удаления.
У меня есть локальная функция, которая выделяет память в куче, но, поскольку я возвращаю созданный мной 2-мерный массив, я не понимаю, как устранить эту утечку памяти, любая помощь будет признательна
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);
}
integers.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 ;
}
integers.h
int** genarr(int*val, int n);
void printint(int **a,int n);
составлено
g++ main.cpp integers.cpp -o integers
Я слышал об умных указателях и планирую узнать о них после этого, но сейчас я хочу знать, есть ли способ исправить это или я должен просто пойти на умные указатели?