3D阵列解除分配会导致分段错误

时间:2014-01-04 09:59:02

标签: c++ arrays

我正在使用三维数组。我这样声明:

int (*DoubleStride_StateTable)[255][255] = new int[StateTable_length][255][255];

我按照这样解除了3D阵列:

for( int i = 0 ; i < 255 ; i++ )
{
    for( int j = 0 ; j < 255 ; j++ )
    {
        cout << i << " " << j << endl;
        delete[] DoubleStride_StateTable[i][j] ;
    }
    delete[] DoubleStride_StateTable[i] ;
}
delete[] DoubleStride_StateTable;

循环只运行两次,即

i=0 j=0
i=0 j=1

然后发生分段错误

我做了正确的解除分配吗?为什么会出现此错误?

1 个答案:

答案 0 :(得分:6)

你的问题在于你释放的东西你不应该自己解脱。 (或者更具体一点:你试图多次释放你分配的内存部分。)

基本经验法则:如果您使用new一次请求内存,那么您也必须只使用delete一次。对于数组也是如此:如果您使用new[]一次,则只能使用delete[]一次。

你只需要一行

delete[] DoubleStride_StateTable;

释放声明中保留的所有内存。

迭代所有元素/级别并释放元素只有在以相同方式创建3D数组时才需要(创建指针数组,然后迭代它并指定另一个级别)。