礼炮..
我正在学习一本书中多维数组的动态分配,并且发现了一些方法,现在还没有问题。
但是这本书的作者向我们展示了一种方法,但是它不能正常工作。就是这个:
pbeans = new double [3][4]; // Allocate memory for a 3x4 array
这是错误:
error C2440: '=' : cannot convert from 'int (*)[4]' to 'int *'
我应该如何定义pbeans(如果这种类型的编码是合法的)?
到底是什么问题?
问候。
最佳答案
我的FAQ on arrays对此进行了介绍:
double (*pbeans)[4];
pbeans = new double[3][4];
// ...
delete[] pbeans;
对于“C声明符受损”,可以使用typedef使其更具可读性:
typedef double row[4];
row *pbeans;
pbeans = new row[3];
// ...
delete[] pbeans;
但是在C++中,我们更喜欢RAII容器而不是原始指针:
#include <vector>
#include <array>
std::vector<std::array<double, 4> > beans(3);
注意完全没有
delete[]
,这使得此解决方案具有异常安全性。