【发布时间】:2013-03-13 05:43:10
【问题描述】:
我在堆栈上分配一个巨大的矩阵时发生堆栈溢出(我同意这一点:在那里分配它很愚蠢),我正在编写以下代码,因为我想使用下标访问矩阵的元素索引 mat[x][y]
double (*mul1)[N][N];
mul1 = new double[N][N];
我收到一个错误:
error C2440: '=' : cannot convert from 'double (*)[1000]' to 'double(*)[1000][1000]'
为什么我不能用 new 分配一个二维数组?
【问题讨论】:
-
这实际上与有人链接为重复的问题略有不同,因为(我假设)N 在编译时是已知的。您可以使用
double (*mul1)[N];来做到这一点,并且避免出现在嵌套数组的链接问题中的指针间接。 (关键是*替换其中一个[],而new T[]返回指向第一个元素的指针。)或者您可以编写unique_ptr<double[][N]> mul1(new double[N][N]);并获得自动清理。
标签: c++ multidimensional-array stack-overflow