2012年1月30日月曜日

Segmentation fault & Bus error

最初にコードを書き始めてぶつかる壁が
Segmentation fault

Bus error
だとおもう.これらの原因はたいてい(ほぼ確実に)
配列などで領域を確保していないところにまで
アクセスしようとしているということだ.

例えば,
int num[10];
の配列に対して,

for(i = 0; i < 20; i++){
   num[i] = 1;
}

このように,配列が確保していない部分まで
値を入れているとエラーが出る場合がある.

出る場合があるというのは,ここで確保していない
部分に値を入れても,その部分とどこかが競合しない
限り,エラーにならない場合がある.つまり,

int num[10], num2[30];

for(i = 0; i < 20; i++){
  num[i] = 1;
}

for(i = 0; i < 30; i++){
  num2[i] = 1;              //ここら辺でsegmentation fault
}

というプログラムを書いたとき,コメントが書いてある
部分で,Segmentation fault を起こす場合がある.
解決法としては,
*segmentation fault が起きた部分以前の部分をチェックする.
*for文で繰り返す回数を増やしてみる
などが挙げられる.

どうしてもこの部分はあっているだろうというところで
エラーが起きる場合は,そのようなところをチェックして
みると,いいかもしれない.

0 件のコメント :

コメントを投稿