Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Ошибка Access Violation при компиляции
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
dup(?)
При переносе проекта из 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 кривой?
jcxz
Цитата(dup(?) @ Dec 18 2015, 14:12) *
Это у всех так или у меня IAR кривой?

Ну да - IAR кривой, падает иногда на ровном месте.
Но Ваш код ещё кривее, IAR от такого бреда вообще в осадок выпал smile3009.gif
dup(?)
Ежу ясно, что это всего лишь демонстрация ошибки, а не реальная функция.
WHALE
Цитата(dup(?) @ Dec 18 2015, 13:03) *
Ежу ясно, что это всего лишь демонстрация ошибки, а не реальная функция.

а смысл в цикле do-while, если из него гарантированно вылетаете на первом проходе?
И неициализированный res, по которому идет сравнение доставляет.
Странный код...
Сергей Борщ
Internal Error - это ошибка внутри компилятора. Пишите в техподдержку ИАРа, пусть чинят и пришлют вам исправленную версию.
den_po
Если IAR - ограниченная версия, то в техподдержке вроде как пошлют.
Всякоразные баги IAR (а таких действительно хватает) иногда лечатся отключением оптимизации.
aiwa
Цитата(dup(?) @ Dec 18 2015, 10:12) *
При переносе проекта из 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);
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.