C++动态分配和释放三维数组的有关问题,求指教~
C++动态分配和释放三维数组的问题,求指教~~~
不知道下面的程序哪里有问题,编译不报错,但是执行后没有显示“按任意键结束”的提示语,貌似是释放的时候出现了问题,求大神指教~~~~~~
------解决思路----------------------
叫赵老师贴他的分配三维数组的代码给你看看就明白了。
------解决思路----------------------
------解决思路----------------------
new了三次,delete两次?
------解决思路----------------------
<= 改成 <
不知道下面的程序哪里有问题,编译不报错,但是执行后没有显示“按任意键结束”的提示语,貌似是释放的时候出现了问题,求大神指教~~~~~~
# include <iostream>
using namespace std;
void init(double*** a,int x,int y,int z)
{
for(int i=0;i<=x;i++)
for(int j=0;j<=y;j++)
for(int p=0;p<=z;p++)
a[i][j][p]=-1;
}
int main ()
{
int x,y,z;
cin>>x>>y>>z;
double*** a=new double** [x];
for(int i=0;i<=x;i++)
a[i]=new double *[y];
for(int i=0;i<=x;i++)
for(int j=0;j<=y;j++)
a[i][j]=new double [z+1];
init(a,x,y,z);
for(int i = 0 ; i <=x; i ++ )
{
for(int j = 0 ; j <=y; j ++ )
{
for(int k = 0 ; k <=z; k ++ )
cout<<a[i][j][k]<<' ' ;
cout<<endl;
}
cout<<endl;
}
for(int i=0;i<=x;i++)
{
for(int j=0;j<=y;j++)
delete [] a[i][j];
}
delete [] a;
return 0;
}
------解决思路----------------------
叫赵老师贴他的分配三维数组的代码给你看看就明白了。
------解决思路----------------------
//内存越界访问了,楼主将所有for语句中的条件语句的<=改为<应该就可以了
//动态申请内存后,在释放的时候应该一个new对应一个delete,一个new[]对应一个delete[];
//楼主看看你new[]和delete[]的总数是否相同就知道有没有正确释放内存了
//ps:就算for语句中只有一条语句,还是建议楼主套个大括号
//
# include <iostream>
using namespace std;
void init(double*** a,int x,int y,int z)
{
for(int i=0;i<x;i++)
{
for(int j=0;j<y;j++)
{
for(int p=0;p<z;p++)
{
a[i][j][p]=-1;
}
}
}
}
int main ()
{
int x,y,z;
cin>>x>>y>>z;
double*** a=new double** [x];
for(int i=0;i<x;i++)
{
a[i]=new double *[y];
}
for(int i=0;i<x;i++)
{
for(int j=0;j<y;j++)
{
a[i][j]=new double [z+1];//这里应该是new double[z]吧,楼主笔误?
}
}
init(a,x,y,z);
for(int i = 0 ; i <x; i ++ )
{
for(int j = 0 ; j <y; j ++ )
{
for(int k = 0 ; k <z; k ++ )
{
cout<<a[i][j][k]<<' ' ;
}
cout<<endl;
}
cout<<endl;
}
for(int i=0;i<x;i++)
{
for(int j=0;j<y;j++)
{
delete [] a[i][j];
}
delete[] a[i];//不释放a[i]的话会内存泄露
}
delete [] a;
return 0;
}
------解决思路----------------------
new了三次,delete两次?
------解决思路----------------------
<= 改成 <
#include <iostream>
using namespace std;
void
init(double ***a, int x, int y, int z)
{
for (int i = 0; i < x; i++)
for (int j = 0; j < y; j++)
for (int p = 0; p < z; p++)
a[i][j][p] = -1;
}
int
main()
{
int x, y, z;
int i, j, k;
double ***a;
cin >> x >> y >> z;
a = new double **[x];
for (i = 0; i < x; i++)
a[i] = new double *[y];
for (i = 0; i < x; i++)
for (j = 0; j < y; j++)
a[i][j] = new double[z + 1];
init(a, x, y, z);
for (i = 0; i < x; i++) {
for (j = 0; j < y; j++) {
for (k = 0; k < z; k++)
cout << a[i][j][k] << ' ';
cout << endl;
}
cout << endl;
}
for (i = 0; i < x; i++)
for (j = 0; j < y; j++)
delete[] a[i][j];
for (i = 0; i < x; i++)
delete[] a[i];
delete[] a;
return 0;
}