1

如何仅使用 Qt-Objects 创建 3D 数组?该数组应该是一个 3D 整数数组。我试图在堆上创建一个标准的 3D 数组。在堆上分配内存工作正常。如果我想释放内存,我得到一个错误。

const int scalefaktor = 16;
int*** anzPixel3d = new int**[256/scalefaktor];

for (int i = 0; i <= 256/scalefaktor ; i++)
{
    anzPixel3d[i] = new int*[256/scalefaktor];

    for (int k = 0; k <= 256/scalefaktor ; k++)
    {
        anzPixel3d[i][k] = new int[256/scalefaktor];
    }

}





for (int j = 0; j <= 256/scalefaktor ; j++)
{


    for (int m = 0; m <= 256/scalefaktor ; m++)
    {
        delete [] anzPixel3d[j][m];
    }

    delete [] anzPixel3d[j];
}
delete [] anzPixel3d;

对于这个项目,我使用 Qt4.8 和 Qt-Creator 2.7.0。我使用 MSVC2010 编译器。

错误消息是:HEAP CORRUPTION DETECTED:在 0x006E3C0 的 Normal 块 (#31715) 之后。CRT 检测到应用程序在堆缓冲区结束后写入内存。

4

2 回答 2

4
#include <QCoreApplication>
#include <QVector>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    int dim_0 = 3;
    int dim_1 = 3;
    int dim_2 = 3;
    int default_val = 0;
    QVector < QVector < QVector< int > > > vec(dim_0,
                                               QVector < QVector <int > > (dim_1,
                                                                           QVector < int > (dim_2, default_val)));

    for( int i = 0; i < dim_0; i++)
    {
        for ( int j = 0; j < dim_1; j++)
        {
            for ( int k = 0; k < dim_2; k++)
            {
                vec[i][j][k] = i*100 + j*10 + k;
            }
        }
    }

    qDebug() << vec;

    return a.exec();
}

希望有帮助。

于 2013-06-06T20:49:40.607 回答
0

HEAP CORRUPTION 发生是因为<=. 如果您替换<=<,您的代码将起作用。

const int scalefaktor = 16;
int*** anzPixel3d = new int**[scalefaktor];
for (int i = 0; i < scalefaktor ; i++)
{
    anzPixel3d[i] = new int*[scalefaktor];
    for (int k = 0; k < scalefaktor ; k++)
    {
        anzPixel3d[i][k] = new int[scalefaktor];
    }
}

for (int j = 0; j < scalefaktor ; j++)
{
    for (int m = 0; m < scalefaktor ; m++)
    {
        delete [] anzPixel3d[j][m];
    }
    delete [] anzPixel3d[j];
}
delete [] anzPixel3d;
于 2017-03-16T06:15:52.237 回答