一个创建二维动态数组的函数

时间:2017-02-18 15:29:02

标签: c++ multidimensional-array

我想创建一个创建二维动态数组的函数。所以我写道:

#include<iostream>
using namespace std;

void make_mat (double *** , int, int);
int main(){
    int m = 3, n = 4;
    double **a;
    make_mat(&a,m,n);

    for (int i = 0; i < m; i++)
        for (int j = 0; j < m; j++)
            cin >> a[i][j];
    for (int i = 0; i < m; i++){
        for (int j = 0; j < m; j++)
            cout << a[i][j] << '\t';
        cout << endl;
    }
    return 0;
    system("pause");
}

void make_mat( double ***x , int m , int n){
    *x = new double *[m];
    for (int i = 0; i < m; i++){
        *x[i] = new double [n];
    }
}  

代码中没有语法错误,但编译后出现以下错误:

  

ConsoleApplication20.exe中0x003657E6处的未处理异常:   0xC0000005:访问冲突写入位置0xCCCCCCCC。

这对于创建创建二维动态数组的函数来说并不是一个好方法。对上面的代码有什么更好的想法或任何更正?

1 个答案:

答案 0 :(得分:2)

*x[i]相当于*(x[i]),相当于x[i][0]

您应该在(*x)[i]函数中使用*x[i]而不是make_mat()