代码之家  ›  专栏  ›  技术社区  ›  Mutating Algorithm

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

  •  1
  • Mutating Algorithm  · 技术社区  · 4 年前

    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;
    
    }
    

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

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

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

    1 回复  |  直到 4 年前
        1
  •  2
  •   Borgleader    4 年前
    matrix[i] = new double*[i + 1] {};
    for(size_t j {}; j < 10; ++j) {
    

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