繁体   English   中英

如何在免费商店的 C++ 中分配 3D 数组?

[英]How do I allocate a 3D array in C++ on the free store?

我目前正在学习如何在 C++ 中使用原始指针。 我了解如何动态分配 2D 数组,但是,作为我自己的练习,我尝试应用我对多个间接级别的理解来分配 3D 数组。 我的尝试如下所示:

int main() {

    double*** matrix { new double**[10] {} };

    for (size_t i {}; i < 10; ++i) {

        matrix[i] = new double*[i + 1] {};

        for(size_t j {}; j < 10; ++j) {

            matrix[i][j] = new double[i + 1] {};
        }

    }

    std::cout << matrix[0][0][0] << std::endl;

    for (size_t i {}; i < 10; ++i) {

        for (size_t j {}; j < 10; ++j) {
            delete[] matrix[i][j];
            matrix[i][j] = nullptr;
        }

        delete[] matrix[i];
        matrix[i] = nullptr;

    }

    delete[] matrix;
    matrix = nullptr;

    return 0;

}

由于我使用的是统一初始化,所以 matrix[0][0][0] 应该打印值 0.0; 但是,这样做时我得到了一个垃圾值。 此外,我有一个double free or corruption (out)错误,我认为这告诉我我试图从同一地址释放 memory 两次。

任何帮助或指导将不胜感激。 我只是想完全理解原始指针。

编辑:我知道 double*** 实际上不是 3D 数组。 我只是想使用简单的术语。

matrix[i] = new double*[i + 1] {};
for(size_t j {}; j < 10; ++j) {

这是你的错误,你分配一个'i + 1'元素的数组,然后循环10,你要么需要在两个地方都有i + 1,要么10,否则这是未定义的行为。 这同样适用于删除(循环检查 10 但您只分配了 i + 1)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM