2014-05-09 2 views
-1

여기서는 N의 임의적 인 행렬 곱셈을 반환하는 함수를 정의하고자합니다. "new"명령으로 행렬을 생성하고 싶습니다. 나는이 오류가 C에 값을 할당 할 때마다간단한 함수에 대한 세그먼트 오류 (C++)

int **multiply(int **A, int **B, int N){ 
    int **C=new int*[N]; 
    for(int i=0;i<N;i++){ 
    for(int j=0;j<N;j++){ 
     for(int k=0;k<N;k++) 
     C[i][j]=C[i][j]+A[i][k]*B[k][j]; 
    } 
    } 
    return (C); 
} 

출력은 (덤프 코어)

분할 오류

처럼 보이는 사람 일이 어떻게 그것을 해결하기 위해 무엇을 말해 줄 수 있을까?

+2

포인터 사용법을 확인하십시오. 또한이 게시물은 SO에 속해 있습니다. – Zeroth

+0

음 ..... 한 시간 전 : http://stackoverflow.com/questions/23574807/segmentation-fault-error-cururs-for-a-simple-function-i-have-coded – chris

답변

0

int **C은 C \ C++에서 포인터가 포인터이기 때문에 C은 배열의 배열입니다. new int*[N]은 외부 배열을 만들지 만 내부 배열은 만들지 않습니다. 어느 시점에 내부 배열을 만들고 C 셀에 할당합니까? C[#]에는 정크가 포함되어 있습니다 (정확히 말하면 디버그 모드로 컴파일하는 경우 0 및 릴리스 모드를 사용하기 전에 해당 메모리에 있던 내용이 모두 있음). C[i][j]을 사용하면 C[i]0 또는 정크가 포함되어 있기 때문에 segfault가 발생합니다.

int **multiply(int **A, int **B, int N){ 
    int **C=new int*[N]; 
    for(int i=0;i<N;i++){ 
     C[i]=new int[N]; // Create the inner array here 
     for(int j=0;j<N;j++){ 
      C[i][j]=0; // You need to initialize the cell or else it'll contain some random junk 
      for(int k=0;k<N;k++) 
       C[i][j]=C[i][j]+A[i][k]*B[k][j]; 
     } 
    } 
    return (C); 
} 
관련 문제