-1

このコードを dev で実行すると、セグメンテーション違反が発生します。行「*(ap + j) = new int[10];」

int main(){
    int** ap;
    for(int j=0;j<10;j++){
        *(ap + j) = new int[10];
        for(int k=0;k<10;k++){
            *(*(ap+j) +k) = 1;
        }
    }
return 0;
}
4

4 に答える 4

0

*(ap + j) = new int[10];まだ割り当てられていないメモリ位置を逆参照します。apまず、変数自体を割り当てる必要があります。

于 2013-10-26T19:53:43.673 に答える
0

ここでの問題は *(ap +j) = new ...

場所「ap + j」にメモリを割り当てている場合、ap + jap を初期化していないため、問題はまだ有効なメモリ場所ではありません。したがって、 j を ap に追加すると、初期化されていないメモリ空間に入り、セグメンテーション違反が発生します。

于 2013-10-26T19:56:16.097 に答える
0

データにメモリを割り当てていますが、ポインター配列にメモリを割り当てていません。apの宣言をに変更するだけで十分かもしれませんint* ap[10];

于 2013-10-26T19:53:05.290 に答える
0

にメモリを割り当てることはありませんap。何かのようなもの:

int** ap;
ap = new int*[10];

あなたが望むものです。

于 2013-10-26T19:53:18.810 に答える