Перейти к содержанию
    

Ошибка Access Violation при компиляции

При переносе проекта из IAR EWARM 5.11 в 7.40 обнаружилось, что последний на код типа

int f(void){
    int res;
    do{
            if(res<1)
                return 0;
            else
                return 1;
    }
    while(res<1);
}

 

Выдает:

Internal Error: [CoreUtil/General]: Access violation (0xc0000005) at 00E5D6E2 (reading from address 0x4)

 

5.11 компилирует молча.

Это у всех так или у меня IAR кривой?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это у всех так или у меня IAR кривой?

Ну да - IAR кривой, падает иногда на ровном месте.

Но Ваш код ещё кривее, IAR от такого бреда вообще в осадок выпал :smile3009:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ежу ясно, что это всего лишь демонстрация ошибки, а не реальная функция.

а смысл в цикле do-while, если из него гарантированно вылетаете на первом проходе?

И неициализированный res, по которому идет сравнение доставляет.

Странный код...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Internal Error - это ошибка внутри компилятора. Пишите в техподдержку ИАРа, пусть чинят и пришлют вам исправленную версию.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если IAR - ограниченная версия, то в техподдержке вроде как пошлют.

Всякоразные баги IAR (а таких действительно хватает) иногда лечатся отключением оптимизации.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При переносе проекта из IAR EWARM 5.11 в 7.40 обнаружилось, что последний на код типа

int f(void){
    int res;
    do{
            if(res<1)
                return 0;
            else
                return 1;
    }
    while(res<1);
}

 

Выдает:

Internal Error: [CoreUtil/General]: Access violation (0xc0000005) at 00E5D6E2 (reading from address 0x4)

 

5.11 компилирует молча.

Это у всех так или у меня IAR кривой?

 

Попробуйте так:

 

int f(void){
    do
    {
    int res;
    do{
            if(res<1)
                return 0;
            else
                return 1;
    }
    while(res<1);
    }while(0);
}

Результат работы тот же, но компилятор должен пропустить

т.е. заключить вызывающий ошибку компилятора кусок в замыкание do{}while(0);

Изменено пользователем IgorKossak
[codebox] для длинного кода, [code] - для короткого!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...