2014-09-18 2 views
0

나는 함수 호출이 완료다차원 배열 초기화 사용하여 포인터

void initArrays(int n,double **a,double **b,double **c) { 
a = new double*[n]; 
for (int i = 0; i < n; i++) 
    a[i] = new double[n]; 
b = new double*[n]; 
for (int i = 0; i < n; i++) 
    b[i] = new double[n]; 
c = new double*[n]; 
for (int i = 0; i < n; i++) 
    c[i] = new double[n]; 
} 

아래처럼 CPP 동적 2 차원 배열을 초기화하는 기능을 갖고 싶어하지만 내가 함수 인수로주는 포인터를 초기화하지 않습니다. 예를 들어 나는 주요

double **x,**y,**z; 
initArrays(3,x,y,z); 

에서이 기능은 내가 잘못 여기서 뭐하는 거지

x[0][0] 

에 액세스 할 수 호출하면?

+0

가능한 중복 [새를 사용하여 C++에서 2 차원 배열을 선언하는 방법?] (http://stackoverflow.com/questions/936687/how-do-i-declare-a-2d-array-in-c -using-new) – CoryKramer

+0

위의 질문에서 설명한대로 main에서 init이 완료되면 작동합니다. 이것은 init을 main에서 호출되는 함수로 옮길 때 실패했습니다. – AlphaWolf

+1

C++에서'new'를 사용하지 마십시오. 우리는'std :: vector'와'std :: unique_ptr'을 가지고 있습니다. 배열 배열을 2D 배열로 사용하지 말고 크기가'x * y' 인 1D 배열을 사용하고 액세스를 매핑하십시오. – Fytch

답변

4

포인터는 결코 값을 할당하지 않기 때문에 초기화되지 않은 채로 있습니다. init 함수의 포인터는 전달한 포인터의 사본입니다. 당신은 참조로 포인터를 전달할 수 있습니다 말했다

void initArrays(int n,double **&a,double **&b,double **&c) 

, 당신은 아마 std::vector 더 나을 수 있습니다.