
No.5ベストアンサー
- 回答日時:
「かなり省略」の部分が重要だと思います。
スタックフレームを破壊している可能性があります。
main, a, bのいずれかの関数でローカルな配列を使っているなら、ためしに配列のサイズを必要量の何倍かに拡大してみてください。これによって症状がなくなるか緩和されるのであれば、配列の上限を超えて書き換えているということになります。
場合によってはprintfの後で落ちているという可能性もあります。なぜなら、printfは、改行が与えられない限り短い文字列はバッファに溜まるだけで、直後でSEGVした場合は画面に反映されないためです。
コメントアウトしたら大丈夫だからprintfのせいだとは限りません。その有無によってスタックフレームの構成が最適化されて、たまたま落ちないだけかもしれません。
No.4
- 回答日時:
main() {
int i = 1;
printf("%d", i);
}
でさえだめということでしょうか?
改行を入れたら(つまり"%d\n")、症状は変わりますか?
分割コンパイルというのは、何をされているのでしょうか?printfは正常で他で落ちているという可能性はありませんか?
この回答への補足
main関数があるファイルではOKです。
現在の状況は、
main.c--------------
main(){
a();
}
a.c------------------
void a(){
b();
}
b.c-------------------
void b(){
int i=1;
printf("%d",i);
}
ってな感じです(かなり省略)。ファイル3つでb.c以外ではprintfは正常です。
ところが、b.cでのprintfはSegmentation faultになります。全部インクルードファイルはちゃんとやっています。
No.3
- 回答日時:
Segmentation fault が printf で発生していると考える根拠は何でしょう。
プログラムの変更箇所がそこだけであっても、それが他の箇所に影響している
ことはよくあります。
printf で間違いないということなら、ライブラリのバグとしか思えませんが。
No.1
- 回答日時:
変数「i」は、何型ですか?多分intかshortかlong型
(多分intかな?)と思います。
このソースの全体が見えていないので、特定はできませんが、このprintf関数にくるまでに、変数iのポイ
ンタを破壊している可能性があります。変数iを宣言
したところでその前の行で宣言した変数をポインタで
処理していませんか?
int j; ←この変数を間違った操作?
int i; ←今回の症状
/* 極端なサンプルです */
memcpy( &j , "ABCDE" , 5 );
てな感じです。
あくまでも一例なので、原因は他にも考えられます。
該当する行までの処理で、ポインタもしくは配列操作
で破壊していなかのチェックをお勧めします。
この回答への補足
int i=1;
printf("%d",i);
もだめです。
だからそこまでで破壊してることはないかと…
回答ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CPU温度・負荷等を調べるには
-
C言語プログラミング 漸化式に...
-
printfの出力内の文字をdefine...
-
コマンドラインに出力した文字...
-
オーバーフローについて。
-
strcmp
-
WM_CLOSEで閉じれないウィンド...
-
摂氏の値を計算するプログラム...
-
カレンダーのプログラムについて
-
Cプログラム
-
printf()文の書式
-
10個出力で改行したいのですが...
-
最早開始時間と最遅完了時刻を...
-
信頼区間の1.96や1.65ってどこ...
-
Aの値からBの値を除するとは??
-
strncpyと_tcsncpy_sのヌルの扱...
-
プログラムでの数字につく”f”の...
-
gcc: incompatible pointer type
-
CStringのFindで文字列検索を行...
-
#define _CRT_SECURE_NO_WARNIN...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
コンパイルエラーについて
-
CTRL+Dでループを抜けるには
-
Cプログラムについて
-
コマンドラインに出力した文字...
-
WM_CLOSEで閉じれないウィンド...
-
C言語の&に関する質問
-
すごろくに使用するサイコロ
-
文字と数字の判定について
-
printf( " %2d", p * q );
-
【C言語教えてください】sin波...
-
%P と %X の違い
-
C言語の勉強しています。すみま...
-
strcmp
-
c言語でAからZまでを表示する...
-
unsigned int型について
-
(C言語)めちゃくちゃな値にな...
-
printf で二進表示を行いたい。
-
プログラミング C言語 課題でプ...
-
c言語で2000年以降カレンダーを...
おすすめ情報