タイトル名の通りのセグメンテーション違反のエラーで詰まってしまっています。
C++ではなくC言語なので、ちょっと場違いかもしれませんがその場合は黙殺にてご勘弁くださ
い。
(上略)
printf(Before Loop...\n);
for( disksize=tp.disk_size; tp.checked_size < disksize; tp.checked_size
+=tp.io_size){
printf(Enter Loop...);
(中略)
} // for文の終わり
printf(End Loop);
(下略)
プログラムはFDへアクセスし、各セクタが正常であるかどうかを調べるものです。
io_size毎のデータを読み書きしていき、それをdisksize(disk_size)まで行います。
チェックの済んだサイズはchecked_sizeが保持しています。
原始的ながらデバッグはコンソールの画面出力にprintf関数で行っているため上下に関数を配
置してあります
tpは自前の構造体でこの文と同じ関数内にて実体化されています。
またここで使われている各メンバ変数はすべてunsigned long型です。
(ここでは使用しないメンバに動的取得した変数や配列などもあります)
ループ条件は真の状態であり、各変数はプログラムの仕様上例外となる数値は入っていません。
上記した部分において、コンパイルは成功するものの実行をかけるとループの内の先頭でセグメ
ンテーション違反を起こし止まってしまいます。
(Before Loop は表示されるが、Enter Loop,End Loopは表示されずにエラーとなる)
このエラーはポインタを移動したりすることで配列の上限を超えてアクセスしたりすると起こる
という程度の知識はありますが、この辺りで配列もポインタで扱う部分もないため
もはやお手上げ状態となってしまっています。
不明な点については随時追記させて頂きますのでお手数ですが、皆様のお力添えをお願いしま
す。
環境:Linux Kernel 2.4.7-10 gcc ver2.96
開発言語:C言語(C++不可)
お騒がせしました。なんとか動くようになりました。
まったく違う場所の外部呼出ししている所が原因だったようです。
ソースコードを徹底的に削りこんでみたら判明しました。
一人相撲で申し訳ありませんでした。
念のため、以下が原因となったコードです
struct floppy_struct fs; // struct floppy_struct *fs
int rtn;
rtn = ioctl(fd, FDGETPRM, &fs); //ioctl(fd, FDGETPRM, fs)
if(rtn == TRUE){
return fs.size;
変える前のコードはコメントアウトしてあるものです。