我正在使用三维数组.我这样声明:
int (*DoubleStride_StateTable)[255][255] = new int[StateTable_length][255][255];
Run Code Online (Sandbox Code Playgroud)
我像这样解除分配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;
Run Code Online (Sandbox Code Playgroud)
循环只运行两次,即
i=0 j=0
i=0 j=1
Run Code Online (Sandbox Code Playgroud)
然后发生分段错误
我正在做正确的解除分配吗?为什么会出现此错误?
你在这里的问题是你释放的东西你不应该自己解脱.(或者更具体一点:您试图多次释放已分配内存的部分内容.)
基本经验法则:如果您使用new
一次请求内存,那么您也必须只使用delete
一次.对于数组也是如此:如果你使用new[]
一次,你也必须只使用delete[]
一次.
你只需要这条线
delete[] DoubleStride_StateTable;
Run Code Online (Sandbox Code Playgroud)
释放声明中保留的所有内存.
迭代所有元素/级别并释放元素只有在以相同方式创建3D数组时才需要(创建指针数组,然后迭代它并指定另一个级别).
归档时间: |
|
查看次数: |
70 次 |
最近记录: |