入力ファイルからデータを読み込む関数をいくつか呼び出します。デバッグモードではすべてうまく動作しますが、リリースモードから実行可能ファイルを実行しようとすると、いくつかの呼び出しの後でfopenを含む行がプログラムをクラッシュさせます。私のコードは次のとおりです。 ヘッダファイルから:機能でリリース実行可能ファイルから実行しているときにのみfopenがクラッシュする
#define presstankdatabase "presst_database.txt"
:デバッグで
FILE *fidread;
fidread = fopen(presstankdatabase,"r");
if (fidread==NULL) {
printf("Failed to open pressurant tank database: %s\n",presstankdatabase);
return 1;
}
、私はちょうど前に、ちょうどラインがfidread =で開始した後、いくつかの後のコメント行を挿入しましたプログラムがクラッシュすると、「問題が原因でプログラムが正常に動作しなくなりました。プログラムを終了してください」というメッセージが表示されます。 fopen呼び出しの直前のコメントが表示されますが、直後のコメントは表示されません。私がfopenを理解していることは、ポインタかNULLのどちらかを返すべきですが、チェックに至る前にクラッシュすることです。私が考えることができるのは、どういうわけか私は記憶上の問題を抱えていますが、私はそれがどのようにfopenのクラッシュに適合するのか分かりません。誰が何が起こっているかも知っていますか?ありがとう!
EDIT 1:私は3つの変数のサイズを増やしました。使用されている場所はprintf()呼び出しを除いて、以下のようになりました。
char *constid = (char*)malloc(sizeof(char)*20);
はそうように使用:
strcpy(constid,"Propellant");
strcpy(constid,"Propellant tank");
strcpy(constid,"Pressurant tank");
変数は20サイズである場合、上記のように、それがクラッシュ。しかし、もし彼らがより大きい(私は120と100を試してみました)、プログラムが実行されます。変数は、fprintf()やprintf()以外の場所では使用されません。
あなたのコードにはおそらく他の問題があります。あなたが見ている問題は、これの副作用です。 valgrindの下で実行してみてください。 –
@Paul R:残念ながら、Windowsではvalgrindというものはありません。 VCはソースベースのメモリデバッグ機能を持っていますが... – thkala