C++ 删除c+中的三维动态数组+;
我做了一个初始化动态3d数组的函数C++ 删除c+中的三维动态数组+;,c++,arrays,pointers,multidimensional-array,dynamic-arrays,C++,Arrays,Pointers,Multidimensional Array,Dynamic Arrays,我做了一个初始化动态3d数组的函数 void initialize_array_3d(char ***Array, int size1, int size2, int size3) { Array = new char**[size1]; for (int t=0; t<size1+1; t++) { Array[t] = new char *[size2]; for (int r=0; r<size2+1; r++)
void initialize_array_3d(char ***Array, int size1, int size2, int size3)
{
Array = new char**[size1];
for (int t=0; t<size1+1; t++)
{
Array[t] = new char *[size2];
for (int r=0; r<size2+1; r++)
{
Array[t][r] = new char [size3];
}
}
}
您使用的是
size1+1
而不是size1
在数组中循环,但由于数组的大小为size1
,因此无法访问元素size1
。在初始化过程中,您可以不受影响(这是未定义的行为),但是您不能删除您不拥有的内存,因此您的程序会崩溃。
考虑使用<代码> STD::向量< /代码>。< P>初学者函数>代码> RealalZeZARYAYX3D 是错误的。它至少应该是这样的
void initialize_array_3d( char ****Array, int size1, int size2, int size3 )
^^^^^^^^^^^^^^
{
*Array = new char**[size1];
for ( int t = 0; t < size1; t++ )
^^^^^^^^^
{
( *Array )[t] = new char *[size2];
for ( int r = 0; r < size2; r++ )
^^^^^^^^^
{
( *Array )[t][r] = new char [size3];
}
}
}
否则,参数char***Array
是函数的局部变量,函数处理参数的副本。局部变量的任何更改都不会影响原始参数
或者可以将参数声明为对pojnter的引用。比如说
void initialize_array_3d( char *** &Array, int size1, int size2, int size3 )
^^^^^^^^^^^^^^
{
Array = new char**[size1];
for ( int t = 0; t < size1; t++ )
^^^^^^^^^
{
Array[t] = new char *[size2];
for ( int r = 0; r < size2; r++ )
^^^^^^^^^
{
Array[t][r] = new char [size3];
}
}
}
对于函数deinitialize\u array\u 3d
,它应该如下所示
initialize_array_3d( &Failed, 5, 4, 2);
^^^^^^^
initialize_array_3d( Failed, 5, 4, 2);
^^^^^^
void deinitialize_array_3d(char ***Array, int size1, int size2)
{
for ( int t = 0; t < size1; t++ )
^^^^^^^^^
{
for ( int r = 0; r < size2; r++ )
^^^^^^^^^
{
delete[] Array[t][r];
}
delete[] Array[t];
}
delete[] Array;
}
void取消初始化\u数组\u 3d(字符***数组,整数大小1,整数大小2)
{
对于(int t=0;t
要解决这个问题,只需使用std::vector,这样就不用担心删除它了。
initialize_array_3d( Failed, 5, 4, 2);
^^^^^^
void deinitialize_array_3d(char ***Array, int size1, int size2)
{
for ( int t = 0; t < size1; t++ )
^^^^^^^^^
{
for ( int r = 0; r < size2; r++ )
^^^^^^^^^
{
delete[] Array[t][r];
}
delete[] Array[t];
}
delete[] Array;
}