Необработанное исключение win32 произошло в main.exe - C (СИ)
Формулировка задачи:
Последняя строка вызывает отладчик с ошибкой Необработанное исключение win32 произошло в main.exe [10000]
Необработанное исключение по адресу 0x77B411D2 (ntdll.dll) в main.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0x004040FF.
Как я понимаю, это проблема с памятью, только чем она вызвана - идей нет.
void input (float *a,float *b,float *c,float *tb,float *te,float *t1,float *t2,float *al,float *V1)
{
int tempSTR;
// case 2 stuff
int ch, i;
FILE *fp; //указатель на поток
char str[20]; //массив строк
char *estr; // указатель с адрессом массива
//
float inpd [8];
printf("1 Ввести данные с клавиатуры \n2 Загрузить существующую сессию\n\n");
scanf("%d",&tempSTR);
do
{
switch (tempSTR)
{
case 2 : //Вывод журнала сессий
fp=("sessionlog.txt","r");
// Проверка открытия
if (fp == NULL) printf ("\nОшибка открытия журнала сессий\n");
else printf ("\nЖурнал сессий открыт успешно\n");
//Считываем кол-во сохраненных сессий
estr=fgets(str, sizeof(str), fp);Решение задачи: «Необработанное исключение win32 произошло в main.exe»
textual
Листинг программы
printf("Введите название сессии для загрузки либо exit для возврата к выбору вариантов ввода\n");
scanf("%s",&str);
if (strcmp(str,"exit"))
{
memset(&adress, 0, sizeof(adress));
strcat (adress,"Sessions/");
strcat (adress,str);
printf ("\n%s\n", adress);
fp=fopen (adress,"r");
//проверка открытия
if (fp == NULL) {printf ("\nСессия не найдена\n"); tempSTR=4; break;}
else printf ("Сессия открыта успешно\n");
//считываем данные
for (i=0;i<=8;i++)
{
fgets(str, sizeof(str), fp);
printf("%s",str);
//char *end_ptr;
strToNum = atof(str);
printf ("%f\n", strToNum);
/*if (*end_ptr)
{
//Сигнализируем об ошибке в строке
printf("\n ошибка при чтении %d-ого параметра\n",i+1);
}*/
inpd[i] = strToNum;
}
fclose(fp);
Объяснение кода листинга программы
- Программа запрашивает у пользователя ввод названия сессии для загрузки или команды
exitдля возврата к выбору вариантов ввода. - Введенное значение сохраняется в переменной типа char под именем
str. - Если пользователь ввел
exit, программа завершается. - В противном случае, программа формирует строку
adress, объединяя строкуSessions/с введенным пользователем названием сессии. - Программа проверяет, открывается ли файл с именем
adressдля чтения. Если файл не открывается, выводится сообщениеСессия не найдена. - Если файл открывается успешно, выводится сообщение
Сессия открыта успешно. - Программа считывает данные из файла в цикле, где каждая итерация соответствует одному параметру сессии.
- Каждый параметр сессии считывается в строку
str, затем преобразуется в числовой формат с помощью функцииatofи сохраняется в соответствующем элементе массиваinpd. - Если при считывании параметра возникает ошибка (например, строка не может быть преобразована в число), программа выводит сообщение об ошибке и продолжает считывание следующего параметра.
- Программа закрывает файл после считывания всех параметров сессии.