Необработанное исключение 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);

Объяснение кода листинга программы

  1. Программа запрашивает у пользователя ввод названия сессии для загрузки или команды exit для возврата к выбору вариантов ввода.
  2. Введенное значение сохраняется в переменной типа char под именем str.
  3. Если пользователь ввел exit, программа завершается.
  4. В противном случае, программа формирует строку adress, объединяя строку Sessions/ с введенным пользователем названием сессии.
  5. Программа проверяет, открывается ли файл с именем adress для чтения. Если файл не открывается, выводится сообщение Сессия не найдена.
  6. Если файл открывается успешно, выводится сообщение Сессия открыта успешно.
  7. Программа считывает данные из файла в цикле, где каждая итерация соответствует одному параметру сессии.
  8. Каждый параметр сессии считывается в строку str, затем преобразуется в числовой формат с помощью функции atof и сохраняется в соответствующем элементе массива inpd.
  9. Если при считывании параметра возникает ошибка (например, строка не может быть преобразована в число), программа выводит сообщение об ошибке и продолжает считывание следующего параметра.
  10. Программа закрывает файл после считывания всех параметров сессии.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.444 из 5
Похожие ответы