2012-03-13 3 views
-1
int sumH(int *arr, int var, int row) { 
    if(var > 7) return(0); 
    return(arr[(row*8 - 8) + var] + sumH(arr, var+1, row)); 
} 

위의 코드는 "버그가있는"코드입니다.내 "C"코드에서 액세스 위반 세그먼트 화 오류 오류

나는 선언 된 배열이 :이 오류 얻을

int array[64] = { some numbers here }; 
int *ptr = array; //pointer to array 
sumH(ptr, 0, 1); //call to the buggy function 

이 함수를 호출 한 후 :
액세스 위반, 분할 오류

+0

어떻게 편곡 정의? – Dan

+0

int array [64] = {여기에 64 개의 난수} – cprogcr

+0

그리고 그 함수에'sumH (array, 0, 1)'로 전달하면 segfault가 발생합니까? – Dan

답변

0

을 당신이 선언 주 :

int array[64] = { 64 random numbers here } 

다음 패스 :

sumH(&array, 0, 1) 

실제로 전달하는 것은 효과적으로 배열의 첫 번째 요소에 대한 포인터에 대한 포인터입니다. 그런 다음 해당 포인터에 +1을 더한 참조를 시도합니다. 잘못된 것입니다. 과 같이 함수를

sumH(array, 0, 1) 

또는 수정 : 당신은 배열 자체에 전달할 수 있습니다

return((*arr)[(row*8 - 8) + var] + sumH(arr, var+1, row)); 
+0

'int 배열 [64] = {몇 가지 숫자}' 다음'INT * PTR = array' 다음 호출'sumH (PTR, 0, 1) ' 난 상술 오류 – cprogcr

+0

다시 얻을 : "실제로 전달하는 것은 배열에 대한 포인터입니다.이 포인터는 첫 번째 요소에 대한 포인터에 대한 포인터입니다. 그런 다음 해당 포인터를 역 참조로 해 봅니다.": true. 재 : "어느 쪽이 맞습니까?": 거짓. 'arr'이 배열의 첫 번째 요소를 가리키면,'arr [1]'은 두 번째 요소를 참조하는 완벽한 방법입니다. – ruakh

+0

그러나 * arr이 배열의 첫 번째 요소를 가리키는 경우 arr [1]은 ** arr이 첫 번째 요소이고 * (* arr + 1)가 두 번째 요소이기 때문에 두 번째 요소를 참조하는 방법이 아닙니다. 요소. arr [1]은 * (arr + 1)입니다. – Dan