2017-02-18 2 views
0

2 차원 동적 배열을 만드는 함수를 만들고 싶습니다.2 차원 동적 배열을 만드는 함수

#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.

완전히 2 차원 동적 배열을 만드는 함수를 만드는 좋은 방법은 아닙니다. 위의 코드에 더 좋은 아이디어 나 수정이 있습니까?

+0

표준 C++에서는 gloval'void main()'정의가 잘못되었습니다. 비표준'main()'함수 타입을 사용할 특별한 이유가 없다면'int main()'을 사용해야합니다. – MikeCAT

+0

좋습니다. 지금 편집하겠습니다. –

+1

예, 더 좋은 아이디어입니다. 비행'std :: vector'를 사용하십시오. –

답변

2

*x[i]*(x[i])과 동일하며 x[i][0]과 같습니다.

make_mat() 함수에서 *x[i] 대신 (*x)[i]을 사용해야합니다.

+0

고맙습니다. ** (x + i)는 (* x) [i]와 동일합니까? –

+1

'a [i]'는'* (a + i)'와 동일합니다. '** (x + i)'는'* (x [i])'와 같으며'x [i] [0]'과 동일하다. '(* x) [i]'와는 같지 않습니다. 이것은'x [0] [i]'와 같습니다. – MikeCAT

관련 문제