こんにちは
プログラムが異常終了して困っているので質問します.
全部は長いため,一部を以下に載せます.
.....................
printf("e\n");
free(home->obp);
home->obp=NULL;
free(home->Stress);
home->Stress=NULL;
printf("f\n");
fclose(fp);
printf("g\n");
fclose(fpc);
printf("h\n");
fclose(fpr);
・・・・・・・・・・・・・・・・・・・・・
の部分で,出力が,
e
f
g
-------------------------------------------------------
Primary job terminated normally, but 1 process returned
a non-zero exit code. Per user-direction, the job has been aborted.
-------------------------------------------------------
--------------------------------------------------------------------------
mpirun noticed that process rank 0 with PID 0 on node katsura exited on signal 11 (Segmentation fault).
--------------------------------------------------------------------------
となって終了します.
printfの所で改行を抜かすとeの文字すら出ないのもよくわかりません.printf("e\n");までは問題なくできてます.
ちなみに,割当は以下のように行い,
home->obp=(real8 *)calloc(3*r,sizeof(real8));
home->Stress=(real8 *)calloc(6*r,sizeof(real8));
ファイルへの書き込みはうまくいってます.
どなたかお知恵を拝借できないでしょうか.
No.3ベストアンサー
- 回答日時:
肝心のバッファを使った処理のソースが無いんじゃ手も足も
出ないですね。
メモリ破壊(Segmentation fault)だと、原因と影響を受けるところが
かけ離れることが多いから、何処でコケているかはたいした手掛かりには
ならないです。
確保したバッファの外にアクセスしていないか丹念にソースを
調べるしかないです。
ファイル出力が正しいことはメモリ操作が正しいことを全く保証しません。
目を皿のようにしてー文字ー文字ソースを調べましょう。
No.4
- 回答日時:
ソース全部ないとなんとも言えません。
やっぱり。カンではSegmentation fault……。
理由は、単に、昔、繰り返し実行する事でおこる異常終了で、
バッファオーバーフローで異常終了するときと問題なくそのまま続行される時があって
その時と状況が似ているなってだけですが。
それくらいしか……すみません。
No.2
- 回答日時:
補足要求です。
1)OSとコンパイラはなんでしょうか。
2)ソースが一部だけ提示されていますが、異常終了の原因は提示されていない箇所にあるように思われます。
https://ideone.com/
上記のサイトは、ユーザー登録不要のソース共有サイトです。こちらに全ソースを提示可能でしょうか。
3)上記のプロフラムは、他のシェル等から呼び出されているように見えます。
どのように実行しているのでしょうか。
以上、この問題を私が解決できる保証はありませんが、上記について開示していただくと、より良い回答がつくかとおもいます。
ありがとうございます。補足させていただきます。
2については、今現在手元にプログラムを置いてないため、しばらくはソースコードをお見せすることはできません。すみません。
No.1
- 回答日時:
この部分は、問題のあるジョブだけが実行するものでしょうか?
とすると、fclose(fpc);かfclose(fpr);のどちらかが犯人でしょうね。
より具体的には、fpcまたはfprがこれよりも前にfcloseされている、もしくはそもそもfopenされていない可能性があります。
ある条件下でのみfopenするものであったり、エラー処理でリソース解放のためにfcloseしていながらreturnやexitを書き忘れる、なんてことはよくありがちです。
>printfの所で改行を抜かすとeの文字すら出ないのもよくわかりません.
これは、FILE構造体を利用する関数特有の動作です。
fprintfなど「f」で始まる関数は、引数にFILE構造体を取ります(printf(fmt, ...)はfprintf(stdout, fmt, ...)と同じ意味です)。
FILE構造体の中には、出力先ファイルなどの情報とともに、読み込んだり書き込んだりしたデータを一時的に蓄えるバッファを持っています。デバイスから読み込む、デバイスに書き込む操作には、システムコールという重い処理を伴うため、これをあまり頻繁に実行したくありません。このため、こういった関数では、頃合いを見てシステムコールを発生させるようにしています。
具体的には、書き込みの場合は例えば「\n」が現れたり、ためた書き込みバッファ上のデータが一定量以上になった時などにシステムコールを発生させる=デバイスに実際に出力します。なので、prinff("e"); は、stdoutというFILE構造体の中にある書き込みバッファの末尾に1バイトのデータが書き加えられるだけで、画面に出力する動作は起きないでしょう。なお、強制的に書き込みバッファにあるデータをデバイスに出力させるときは、fflush()という関数を使います。
ありがとうございます!
FILE構造体の話は初耳だったのでとても助かります.
しかし,異常終了の問題は最初は発生せず,何回か繰り返した時に起こるんですよね...
ですから,fopenしていない,fcloseをどこかでしている,ということは無いです(確認しました).最も,プログラムに書き込むことなしに自動でそういった処理が行われている等していれば話は別ですが.そんなことありますかね??
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# LU分解法のピボット選択機能実装について(C言語・gcc-9) 1 2022/07/22 15:20
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・ハマっている「お菓子」を教えて!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CreateProcess関数と実行後の戻...
-
VC++でUTF-8のファイルを出力し...
-
BitBltについて。
-
アプリケーションのログファイ...
-
ファイル出力の場所を指定
-
テキストファイルに改行コード...
-
ファイル形式またはファイル拡...
-
pcap形式データをテキストへ抽出
-
C言語のプログラムが異常終了し...
-
CSVファイルを任意の場所に出力...
-
コマンドライン引数の区別【C言...
-
Wordマクロで指定したフォルダ...
-
MS-Word で作成した表をLatexに...
-
標準出力とファイルに効率的に...
-
外国語とCSVについて
-
pgm画像入出力(C言語)
-
MrBayesで系統樹を書く方法
-
CBool関数について VB6とVB.net...
-
CSV形式に変換
-
コマンド(例えばls)の出力結果...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VC++でUTF-8のファイルを出力し...
-
コマンド(例えばls)の出力結果...
-
ファイル出力の場所を指定
-
Acccess レポートをグループ別...
-
テキストファイルに改行コード...
-
VBSでEXCEL⇒CSV変換で日付の書...
-
AccessVBA複数レポート条件毎に...
-
ファイルの文字コードをUTF-8に...
-
外国語とCSVについて
-
C言語のプログラムが異常終了し...
-
ファイル形式またはファイル拡...
-
二次元配列をクリップボードに...
-
printfだと出力されるのにfprin...
-
シェルコマンドの 2>&1 とはど...
-
【ExcelVBA】UTF-8(BOM無)でC...
-
VBA でメモ帳へ保存する際の保...
-
Wordマクロで指定したフォルダ...
-
サウンド出力のデバイスを選択...
-
VB.NETでExcelファイルを出力す...
-
アクセス>マクロ>テキスト変換
おすすめ情報
異常終了は,プログラムを繰り返し実行することで起こります.つまり,最初は何の問題もなく実行されています.
OSはfedora27で、コンパイラはgcc、バージョンは7.2.1です
実行時のコマンドはmpirun -np 1 <プログラム名> と打ち込んでいます