如何在构造函数 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)
怎么样?
使用逗号分隔符,编译器会将其视为唯一一个表达式。
我创建了一个 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)
怎么样?
使用逗号分隔符,编译器会将其视为唯一一个表达式。