首页 > 解决方案 > 如何在构造函数 C++ 中初始化多维动态分配的数组?

问题描述

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

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

标签: c++arraysdynamic-memory-allocation

解决方案


创建二维数组时您应该做的第一件事是为第一个维度分配内存,然后对其进行迭代以创建第二个维度。你的第二部分是正确的,但你缺少的是: bu = new BufferUnion*[nBufs]在循环创建第二个维度之前。

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


推荐阅读