c++ - 如何在构造函数 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];
}
}
解决方案
创建二维数组时您应该做的第一件事是为第一个维度分配内存,然后对其进行迭代以创建第二个维度。你的第二部分是正确的,但你缺少的是:
bu = new BufferUnion*[nBufs]
在循环创建第二个维度之前。
作为旁注:逗号for (int i=0; i < nBufs, ++i)
代替分号怎么样: for (int i=0; i < nBufs; ++i)
?使用逗号分隔符,编译器会将其视为仅一个表达式。
推荐阅读
- amazon-web-services - 在 aws-cdk 中操作 CfnParameter 字符串的最佳方法
- r - 我正在尝试在每个数据帧中为多个文件查找非 na 观察值的数量
- python - Python - 从不以文件文件扩展名结尾的 url 获取图像名称和扩展名
- git - Git rebase 奇怪地添加了对 .gitignore 的更改
- string - 从文件中读取 Flutter 返回 Future 的实例
而不是文件中的真实文本 - java - 如何在 Oracle 过程中编写 Java 代码
- css - 如何在未定义的高度 div 中滚动
- ajax - 如何在创建的下拉列表中使用相同的 ajax 调用
- excel - 跟踪工作表之间的剪切和粘贴更改
- c# - Entity Framework 6 - 处理二进制数据时的内存和性能问题(异步方法)