我正在使用三维数组。我这样声明:
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
然后发生分段错误
我在做正确的重新分配吗?为什么会发生此错误?
这里的问题是您要释放不应该释放的东西。(或更具体地讲:您试图多次释放部分已分配的内存。)
基本经验法则:如果请求使用new
一次内存,则也必须只使用delete
一次。数组也是如此:如果使用new[]
一次,则也必须只使用delete[]
一次。
您只需要线
delete[] DoubleStride_StateTable;
释放声明中已保留的所有内存。
仅当以相同的方式创建3D数组(创建指针数组,然后对其进行迭代并分配另一个级别)时,才有必要迭代所有元素/级别并释放元素。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句