3D阵列取消分配会产生分段错误

Xara

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

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在“ for”循环初始化程序中取消引用指针会产生分段错误

将值分配给指针结构会产生分段错误

在函数内部使用fftw3会产生分段错误

为什么该程序会产生分段错误?

为什么以下代码会产生分段错误?

为什么下面的代码会产生分段错误

sprintf 产生分段错误

Gcompris 产生分段错误错误

具有c-tor和d-tor会产生分段错误,而没有它们则没有分段错误

每条命令都会产生分段错误

GDAL DestroyFeature() 方法产生分段错误

printf是否产生分段错误?

为什么会产生分段错误(核心转储)错误?

通过unique_ptr访问结构成员会产生分段错误

为什么这个简单的链表程序会产生分段错误?

C中基于字符串的链表会产生分段错误

从程序集(x86 / 64)调用read syscall会产生分段错误(编译器构造)

尝试连接字符串会产生分段错误

检查图的连通性的程序产生分段错误

当从不同的图像访问时,为什么与可分配组件协同排列会产生分割错误?

SQL-插入postgresql表会产生分号错误

将头节点添加到单链表中会产生分段错误错误

为什么命令行参数在访问时会产生分段错误?

为什么使用信号处理程序杀死自己的脚本会产生分段错误?

分配给数组时出现分段错误?HackerRank 2D 阵列 - DS

为什么发生分段错误错误

分段错误,分配阵列-使用Intel v14

Htonl中发生分段错误

对3D阵列求和