Необработанное исключение 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
. - Если при считывании параметра возникает ошибка (например, строка не может быть преобразована в число), программа выводит сообщение об ошибке и продолжает считывание следующего параметра.
- Программа закрывает файл после считывания всех параметров сессии.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д