入力ファイルからデータを読み取る関数を何度か呼び出します。デバッグモードではすべて正常に動作しますが、実行可能ファイルをリリースモードから実行しようとすると、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のクラッシュにどのように適合するかはわかりません。誰かが何が起こっているのか知っていますか?ありがとう!
編集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()呼び出し以外の場所では使用されません。