1

次のコードの何が問題なのか誰か教えてください。EXC_BAD_ACCESSメモリにアクセスできませんでした。理由:KERN_INVALID_ADDRESS

それぞれが異なるサイズの int 配列を指す 7 つのポインターのグローバル配列を宣言します。

int **pt_all_arrays[7];

私の機能ではA()

    for (int i = 0; i < 7; ++i) {
        int array_size = function_that_returns_array_size();
        int *myarray = (int *)malloc(array_size * sizeof (int));

        // DO WORK...    

        // Store the array in the big array
        *(pt_all_arrays[i]) = myarray;  <-----EXCEPTION
    }

最後の行で例外がスローされます。私はMacで実行していますが、gcc -std=gnu99

4

4 に答える 4

0
int **pt_all_arrays[7];

これは実際には、int へのポインターへの 7 つのポインターの配列を宣言します。(int 配列へのポインター)。したがって、配列を保存する場合は、次のものが必要です。

int *pt_all_arrays[7];

配列にアクセスする場合:

pt_all_arrays[i]

これは実際には次のように言っています。

*(pt_all_arrays + i)

したがって、追加を追加したくない場合は、次のよう*にします。

pt_all_arrays[i] = myarray;

しましょう。

于 2013-05-08T13:47:24.160 に答える
0

最後の行で、 が指すメモリ位置に書き込もうとしていますpt_all_arrays[i]。は初期化されていないためpt_all_arrays[i]、これはどこかを指している可能性があります。あなたの場合、無効なメモリアドレスを指しています。

于 2013-05-08T13:44:24.737 に答える