- ベストアンサー
通信系プログラムについて
通信のプログラムを組んでいます。tera termでサーバ上で作業を行っています。送信プログラム、受信プログラム、制御プログラム、データ書き込みプログラムと四つのプログラムを同時に実行させるのですが、送受信するデータ量が大きいと、受信プログラムやデータ書き込みプログラムにバス・エラーcore dumpedと表示されます。プログラム中の動的メモリ管理はしっかりやっているつもりですが、考えられる原因はなんでしょうか?一つのサーバで全部のプログラムを動かしているのがまずいんでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
動的メモリの管理の問題でバスエラー(SIGBUS)と言うのは発生率が低いと思います。 一般的にSIGBUSの原因としては ・デバイスからの応答が無い場合 ・割り込みベクトル番号取り込みのエラー ・メモリー管理ユニット(MMU)で決定した不当なアクセス要求 の3つがほとんどで、アドレス計算ミスやデバイスアクセス時の障害が発生原因と間がられます。 と言ってもSIGBUSはCPUアーキテクチャに依存するのでCUがわからないとなんともいえないのですが… (MC68000ならint *に奇数アドレスを代入しただけでSIGBUSだし) 動的メモリの管理ミスならSIGILLかSIGSEGVが投げられると思います。 どちらにしてもsignalでSIGBUSをトラップしてスタックトレースすればシグナルの発生位置はわかります。 > 一つのサーバで全部のプログラムを動かしているのがまずいんでしょうか プログラムがマトモなら全く問題ないはずですよ。
その他の回答 (1)
- a-kuma
- ベストアンサー率50% (1122/2211)
ずばり > プログラム中の動的メモリ管理はしっかりやっているつもりですが、 が、きちんとできていない、というのが原因です。 > 一つのサーバで全部のプログラムを動かしているのがまずいんでしょうか? が絡むとしたら、メモリ割り当てで malloc() 等がエラーになったときの処理がきちんと 書けていない、という可能性もありますが。
お礼
バス・エラーが出るプログラムを見直し、動的メモリ管理をしました。malloc()がエラーになった時の処理もきちんと書いたところ、セグメント例外(core dumped)と表示されました。 これはこれはどういう意味のエラーなんでしょうか? ネットで調べてもよく分からないので教えて下さい。
お礼
ご返答ありがとうございました。 どちらにしてもsignalでSIGBUSをトラップしてスタックトレースすればシグナルの発生位置はわかります。 >の意味がさっぱりわかりません。 よろろしかったら、具体的にどのようにすれば良いか教えて下さい。 よろしくお願いします。