Выполняю несколько вызовов функции, которая считывает данные из входного файла. Все отлично работает в режиме отладки, но когда я пытаюсь запустить исполняемый файл из режима деблокирования, линия с 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, но он падает до того, как он даже попадает на чек. Единственное, о чем я могу думать, это то, что у меня возникают проблемы с памятью, но я не знаю, как это может сгореть. Кто-нибудь знает, что может произойти? Благодаря!
EDIT 1: Я увеличил размер трех переменных, и единственные места, где они используются (кроме вызовов 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: К сожалению, нет такой вещи, как valgrind в Windows. VC имеет средство отладки на основе источника, хотя ... – thkala