如何在构造函数 C++ 中初始化多维动态分配数组?

How to initialiaze a multidimensional dynamically allocated array in a constructor C++?

我创建了一个 class 模板,其中包含以下类型的联合,其长度应该是可变的。

union BufferUnion {
    int buf32;
    short buf16[2];
};

class SomeClass {
    
    int nBufs;
    int buflen;

    BufferUnion **bu;

    SomeClass(int nBufs, int buflen);
    ~SomeClass();
}

现在我想在 .cpp 文件中动态分配其中一些缓冲区,但在尝试调用构造函数时遇到读取冲突。

SomeClass::SomeClass(int nBufs, int buflen)
{
    this->nBufs = nBufs;
    this->buflen = buflen;

    for (int i=0; i < nBufs; ++i) {
        bu[i] = new BufferUnion[buflen]; 
    } 
}

创建二维数组时首先应该为第一维分配内存,然后在其上迭代创建第二维。 你的第二部分是对的,但你缺少的是: bu = new BufferUnion*[nBufs] 在创建第二个维度的循环之前。

作为旁注: for (int i=0; i < nBufs, ++i) 中的逗号而不是分号:for (int i=0; i < nBufs; ++i) 怎么样? 使用逗号分隔符,编译器会将其视为唯一一个表达式。