C++动态分配和释放三维数组的有关问题,求指教~

C++动态分配和释放三维数组的问题,求指教~~~
不知道下面的程序哪里有问题,编译不报错,但是执行后没有显示“按任意键结束”的提示语,貌似是释放的时候出现了问题,求大神指教~~~~~~C++动态分配和释放三维数组的有关问题,求指教~

# 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;
}

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;
    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;
}