作者:vijay | 来源:互联网 | 2023-06-06 21:10
问题:调用函数用new申请空间,如果不释放则会存在内存泄露问题调用函数用new申请空间的释放方法方法一:将要反馈的结果赋值给一个栈元素,栈元素会随着函数调用的完成而自动释放占用的空
问题:调用函数用new申请空间,如果不释放则会存在内存泄露问题
调用函数用new申请空间的释放方法
方法一:将要反馈的结果赋值给一个栈元素,栈元素会随着函数调用的完成而自动释放占用的空间。
方法二:用一个指针p接受这个返回地址,然后再释放这个指针指向的空间
程序实现
第一种方案
#include
#include
using namespace std;
int getMax(int a,int b)
{
return (a>b?a:b);
}
int ** findLCS(const char * a,const char *b)
{
int lenA=strlen(a);
int lenB=strlen(b);
int **c=new int*[lenA+1] ;
for(int i=0;i {
c[i]=new int[lenB+1];
}
for(int i=0;i c[i][0]=0;
for(int j=0;j c[0][j]=0;
for(int i=1;i<=lenA;i++)
{
for(int j=1;j<=lenB;j++)
{
if(a[i]==b[j])
{
c[i][j]=c[i-1][j-1]+1;
}
else
{
c[i][j]=getMax(c[i-1][j],c[i][j-1]);
}
}
}
int res=c[lenA][lenB];
for(int i=0;i delete []c[i];
delete c;
return res;
}
int main()
{
char a[100]="abcbdab";
char b[100]="bdcaba";
cout< return 0;
}
第二种方案
#include
#include
using namespace std;
int getMax(int a,int b)
{
return (a>b?a:b);
}
int ** findLCS(const char * a,const char *b)
{
int lenA=strlen(a);
int lenB=strlen(b);
int **c=new int*[lenA+1] ;
for(int i=0;i {
c[i]=new int[lenB+1];
}
for(int i=0;i c[i][0]=0;
for(int j=0;j c[0][j]=0;
for(int i=1;i<=lenA;i++)
{
for(int j=1;j<=lenB;j++)
{
if(a[i]==b[j])
{
c[i][j]=c[i-1][j-1]+1;
}
else
{
c[i][j]=getMax(c[i-1][j],c[i][j-1]);
}
}
}
return c;
}
int main()
{
char a[100]="abcbdab";
char b[100]="bdcaba";
int **c=findLCS(a,b);
cout< int lenA=strlen(a);
for(int i=0;i delete []c[i];
delete c;
return 0;
}