读书人

动态申请内存有关问题

发布时间: 2013-03-20 15:25:24 作者: rapoo

动态申请内存问题
请教各位,若一个调用函数体内,动态申请了内存,在main函数中调用此函数返回一个指针后,调用函数内的动态内存如何释放?譬如下面的程序


Complex*** hanshu(Complex ***p)
{

Complex ***Z=(Complex ***)malloc((Nx1+1) * sizeof(Complex**));
if(Z== NULL)
{
printf("Malloc False");
}
for(int i =0; i< Nx1+1; i++)
{
Z[i] = (Complex **)malloc((Ny1+1) * sizeof(Complex*));
if(Z[i] == NULL)
{
printf("Malloc False");
}
for( int j = 0; j< Ny1+1; j++)
{
Z[i][j]=(Complex *)malloc((Nz1+1) * sizeof(Complex));
if(Z[i][j] == NULL)
{
printf("Malloc False");
}
}
}
for(int i=0; i<Nx1+1; i++)
{
for(int j=0; j<Ny1+1; j++)
{
for(int k=0;k<Nz1+1;k++)
{
Z[i][j][k]=p[i][j][k];
}
}
}
return Z;
}
void main()
{
Complex co (0,0);
Complex ***A=(Complex ***)malloc((Nx1+1) * sizeof(Complex**));
if(A== NULL)
{
printf("Malloc False");
}
for(int i =0; i< Nx1+1; i++)
{
A[i] = (Complex **)malloc((Ny1+1) * sizeof(Complex*));
if(A[i] == NULL)
{
printf("Malloc False");
}
for( int j = 0; j< Ny1+1; j++)
{
A[i][j]=(Complex *)malloc((Nz1+1) * sizeof(Complex));
if(A[i][j] == NULL)
{
printf("Malloc False");
}
}
}

Complex ***B=(Complex ***)malloc((Nx1+1) * sizeof(Complex**));
if(B== NULL)
{
printf("Malloc False");
}
for(int i =0; i< Nx1+1; i++)
{
B[i] = (Complex **)malloc((Ny1+1) * sizeof(Complex*));
if(Z[i] == NULL)
{
printf("Malloc False");
}
for( int j = 0; j< Ny1+1; j++)
{
B[i][j]=(Complex *)malloc((Nz1+1) * sizeof(Complex));
if(B[i][j] == NULL)
{
printf("Malloc False");
}
}
}
for(int i=0; i<Nx1+1; i++)
{
for(int j=0; j<Ny1+1; j++)
{


for(int k=0;k<Nz1+1;k++)
{
B[i][j][k]=co;
}
}
}
A=hanshu(B);

}


Complex是我自己编写的一个复数类。我A用完之后,是只需要释放A的空间就可以了吗?那hanshu里面的Z的空间用释放吗?B后续程序还要用到,先不用释放。 动态申请内存 C++ malloc free
[解决办法]
C++提倡用new delete

读书人网 >C++

热点推荐