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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語(構造体) 3 2022/07/05 20:08
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# LU分解法のピボッティングについて(C言語/gcc-9) 3 2022/07/11 23:10
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# 3×3のラテン方陣をつくるプログラムを作成したのですが、(↓) #include <stdio.h> 5 2023/07/10 01:53
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
10個出力で改行したいのですが...
-
c言語でAからZまでを表示する...
-
1秒で動くインターバルタイマ
-
C言語初心者です。次の問題で質...
-
printf で二進表示を行いたい。
-
ヘロンの公式を作ったプルグラ...
-
C言語での数字の花形表示
-
二つの整数値の大小比較
-
インクリメント演算子をprintf...
-
strcmp
-
球の体積と表面積を表示するプ...
-
printf( " %2d", p * q );
-
C言語 プログラミング
-
コンパイルエラーについて
-
エラーの意味が…
-
Cのdoubleの浮動小数点表示につ...
-
Cプログラムについて
-
C言語 関数
-
CTRL+Dでループを抜けるには
-
hit&bolwのプログラミングがで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
既約分数の表示プログラム
-
printf で二進表示を行いたい。
-
8人分のテストの点数を入力し、...
-
printf( " %2d", p * q );
-
strcmp
-
CTRL+Dでループを抜けるには
-
4の倍数を論理演算で表す。。
-
%P と %X の違い
-
【C言語教えてください】sin波...
-
c言語でAからZまでを表示する...
-
cshの文字列操作(0埋め)
-
万年カレンダーのC言語プログラ...
-
コマンドラインに出力した文字...
-
scanfに文字が入力されたときに...
-
コンパイルエラーについて
-
ホームページをC言語で作りたい...
-
改行について 1行に何個かづ...
-
台形の面積を求めるプログラム
-
なぜgccはstdio.hをインクルー...
おすすめ情報