【问题标题】:new matrix[N][N] failure [duplicate]新矩阵[N][N]失败[重复]
【发布时间】: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


【解决方案1】:

你可以这样做:

int N = 10 ;
double** mul1 = new double*[N];
for(int i = 0; i < N; ++i)
   mul1[i] = new double[N];

【讨论】:

    【解决方案2】:
    double *mul1[N];
    for (int i=0;i<N;++i)
        mul1[i] = new double[N];
    

    Representing a 2D array as a 1D array

    Performance of 2-dimensional array vs 1-dimensional array

    【讨论】:

    • 错误 C2440: '=' : 无法从 'double (*)[1000]' 转换为 'double **'
    • @JohnnyPauling 修复了这个问题...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多