このコードを 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;
}
*(ap + j) = new int[10];
まだ割り当てられていないメモリ位置を逆参照します。ap
まず、変数自体を割り当てる必要があります。
ここでの問題は *(ap +j) = new ...
場所「ap + j」にメモリを割り当てている場合、ap + j
ap を初期化していないため、問題はまだ有効なメモリ場所ではありません。したがって、 j を ap に追加すると、初期化されていないメモリ空間に入り、セグメンテーション違反が発生します。
データにメモリを割り当てていますが、ポインター配列にメモリを割り当てていません。ap
の宣言をに変更するだけで十分かもしれませんint* ap[10];
。
にメモリを割り当てることはありませんap
。何かのようなもの:
int** ap;
ap = new int*[10];
あなたが望むものです。