• ベストアンサー

バスエラー?

つい最近C言語に手を出し始めた者です。 OSXにて、CotEditorとターミナルで地道にやってます。 http://www.sgnet.co.jp/c/4-3.htm 上記のサイトの「リスト10」のプログラムをコンパイル、実行すると ターミナルが「Bus error」を吐いてきます。 何が問題なのですか?

質問者が選んだベストアンサー

  • ベストアンサー
noname#39970
noname#39970
回答No.2

何とも言えないけど 配列を41じゃなく とりあえず100くらいにしたらどうなる? 解消するようなら文字コードの違いによるbyte数の違い 件のは日本語1文字を2byteとしてぎりぎりに設定してある OSXのターミナルでの文字やxcodeのgccが扱う文字コードによって日本語1文字が2byteであるとは保証できない。

hikki21
質問者

お礼

回答ありがとうございます。 100にしたところ、あっさり解決しました。 指摘された事がズバリ的中していたようです。 ありがとうございました。

その他の回答 (3)

回答No.4

私が知ってる限りでは、No3のフォーマット指定がないのは問題ないハズです。 macのことは全く知りませんが、 No2のことも気になりました。 printf("%d\n", sizeof("二つ目の引数を一つ目の引き数にコピーする")); はどうなりますか。 char str[41];   なので 41 より大きかったら問題あるかもしれないですね。 あと、gdbでいつ死んでるか調べるのもいいと思います。 こんな風にします。 $ gcc -g list10.c # などと -g をつけて コンパイルして $ gdb a.out (gdb) b main (gdb) l #=> 多分list10.cのソースが出る (gdb) n #=> 1行ずつ実行される。これを繰り返す 多分 strcpy() してるところか、main()が終るところで死んでるのではないかと思います。

hikki21
質問者

お礼

sizeofが61になりましたので、やはりそこが問題だったようです。 gdbの方も試してみようと思います。 ありがとうございました。

noname#26650
noname#26650
回答No.3

(3)のprintfで、書式文字列を指定していないためではないでしょうか。 試しに、 printf("%s\n", str); と修正してみてください。

hikki21
質問者

お礼

回答ありがとうございました。 勉強になりました。

  • saru_1234
  • ベストアンサー率33% (452/1341)
回答No.1

ハード屋をやってます。 OSX ということはCPUは68系かPowerPC でしょうか、 そのコンパイラとは縁がありませんが、 BUS Error というと例えば メモリなどのデバイスが実装されていないアドレスを アクセスすると発生する性質のエラーを意味する語として 使われてます。 該当するのか不明ですが心当たりありませんか?

hikki21
質問者

お礼

回答ありがとうございます。 文字コードの違いが問題だったようです。 無事解決しました。ありがとうございました。

関連するQ&A