Jump to content

    
Sign in to follow this  
dup(?)

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

Recommended Posts

При переносе проекта из 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 кривой?

Share this post


Link to post
Share on other sites
Это у всех так или у меня IAR кривой?

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

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

Share this post


Link to post
Share on other sites
Ежу ясно, что это всего лишь демонстрация ошибки, а не реальная функция.

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
При переносе проекта из 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);

Edited by IgorKossak
[codebox] для длинного кода, [code] - для короткого!!!

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this