C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Страшный глюк, у кого BCB5 + UP1 — не расслабляйтесь
Георгий
Отправлено: 21.06.2003, 18:11


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



взято с IXBT.com (http://forum.ixbt.com/0026/023284.html):
CODE

недавно сталкнулись с ошибкой суть которой поясняет следующий пример:

char m[100];

void f(int a, int B)
{
m[b] = 1;

m[a+a+a] = 0;
}

....

f(1, 2);

посмотрим что сгенерировал компилер в функции f:
; m[b] = 1;
mov eax, [ebp +0x19];?
mov byte ptr [eax + 0x4036a0], 1
; m[a+a+a] = 0;
mov edx, [ebp+0x08]
mov byte ptr [edx+0x4036a0], 0;??

странно да? Особенно то, как компилер высчитал переменную b, в честь чего это ее адрес стал ebp+0x19?

если заменить m[a+a+a] = 0; на m[a*3] = 0; то ошибки не будет: ; m[b] = 1;
mov eax, [ebp +0x0c]
mov byte ptr [eax + 0x4036a0], 1
; m[a*3] = 0;
mov edx, [ebp+0x08]
lea edx, [edx+edx*2]
mov byte ptr [edx+0x4036a0], 0


Глюк четко проявляется в Builder C++ 5.0 + Update Pack1.

Может у кого-нибудь есть ещё примеры не корректной работы компилятора? Или обьяснение о причинах глюка?

Отредактировано Георгий — 21 Jun 2003, 18:11
Asher
Отправлено: 22.06.2003, 20:27


Мастер участка

Группа: Модератор
Сообщений: 550



Вот еще пример (наверняка это заметили и до меня и где-то уже пробегало, я не в курсе)
CODE

//---------------------------------------------------------------------------
#pragma hdrstop
#include "stdio.h"
#include <memory>
#include <string>
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
std::auto_ptr < std::string >string1( new std::string("Text\n"));
std::auto_ptr < std::string >string2;
string2 = string1;
if(string1.get() != NULL)
 printf("string1 %s", string1.get()->c_str());
if(string2.get() != NULL)
 printf("string2 %s", string2.get()->c_str());
return 0;
}
//---------------------------------------------------------------------------

На печать входит только string2 Text ohmy.gif
При копировании string2 = string1; string1 становится NULL sad.gif

Вернуться в Вопросы программирования в C++Builder