我想创建一个创建二维动态数组的函数。所以我写道:
#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。
这对于创建创建二维动态数组的函数来说并不是一个好方法。对上面的代码有什么更好的想法或任何更正?
答案 0 :(得分:2)
*x[i]
相当于*(x[i])
,相当于x[i][0]
。
您应该在(*x)[i]
函数中使用*x[i]
而不是make_mat()
。