Я делаю несколько вызовов функции, которая читает данные из входного файла. Все отлично работает в режиме отладки, но когда я пытаюсь запустить исполняемый файл из режима выпуска, строка с 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: я увеличил размер трех переменных, и единственные места, где они используются (кроме вызовов printf ()), показаны ниже.
char *constid = (char*)malloc(sizeof(char)*20);
Используется так:
strcpy(constid,"Propellant");
strcpy(constid,"Propellant tank");
strcpy(constid,"Pressurant tank");
Если переменные имеют размер 20, как показано выше, происходит сбой. Но если они больше (я пробовал 120 и 100), программа запускается. Переменные не используются ни в каких других местах, кроме вызовов fprintf () или printf ().