2012-03-13 38 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配列[64] = {ここで64の乱数} – cprogcr

+0

そして、あなたは、単に 'sumH(アレイ、0、1)'ように、その関数に渡し、それがセグメンテーション違反の原因? – 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) ' iは上記エラー – cprogcr

+0

日時を取得します。 "あなたが実際に渡しているのは、配列へのポインタです。これは実質的に最初の要素へのポインタへのポインタです。 Re: "間違っています":false。 'arr'が配列の最初の要素を指す場合、' arr [1] 'は2番目の要素を参照するのに完全に有効な方法です。 – ruakh

+0

しかし、配列の最初の要素に対して* ARRポイント場合、** ARR最初の要素であり、*(* ARR + 1)ため、[1]、第二の要素を参照するための方法ではないARRは秒素子。 arr [1]は*(arr + 1)です。 – Dan

関連する問題