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

 
Что за ошибка CodeGuard?, arithmetic pointer underrun
Aractan
Отправлено: 17.06.2005, 07:49


Ученик-кочегар

Группа: Участник
Сообщений: 22



arithmetic pointer underrun что это значит и почему может быть?
На ровном месте глючит
*Data=new char[6002];
char* aData=reinterpret_cast(*Data);
TCommand Command(reinterpret_cast(*Data));
Command.Head.Command=MI_RUN;
Command.Head.Signature=SIGNATURE;
Command.Head.BodyLen=0;
int Result=fCommandExchanger->Exchange(&Command);
Size=Command.Head.BodyLen;
short lkError=*((short*) (&(( (char*) (*Data) )[Size-2] ) ) );
if(lkError){
TMyEvent* pMyEvent = new TMyEvent(this, //вот тут ошибка возникает
etInternalMessage,
ntNoNotification,
"Бла-бла-бла "+lkError
);
if(fManager) fManager->ProcessEvent(pMyEvent);
else throw Exception("Debug: fManager doesn't set. uP2MHardWare::P2MHardWare::Run");
}
return Result;
olegenty
Отправлено: 17.06.2005, 08:38


Ветеран

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



this на что указывает?
Aractan
Отправлено: 17.06.2005, 13:24


Ученик-кочегар

Группа: Участник
Сообщений: 22



Class HW
{
public:
SendCommand(TCommand* Command);
};
HW::SendCommand(TCommand* Command)
{
// тут то что я запостил в первом сообющении
}
т.е. this указывает на некоторый мой класс
Aractan
Отправлено: 17.06.2005, 13:27


Ученик-кочегар

Группа: Участник
Сообщений: 22



вот так если уж совсем точно
CODE

class HW
{
public:
int SomeAction(void** Data);
};
int HW::SomeAction(void** Data)
{
*Data=new char[6002];
char* aData=reinterpret_cast(*Data);
TCommand Command(reinterpret_cast(*Data));
Command.Head.Command=MI_RUN;
Command.Head.Signature=SIGNATURE;
Command.Head.BodyLen=0;
int Result=fCommandExchanger->Exchange(&Command);
Size=Command.Head.BodyLen;
short lkError=*((short*) (&(( (char*) (*Data) )[Size-2] ) ) );
if(lkError){
TMyEvent* pMyEvent = new TMyEvent(this, //вот тут ошибка возникает
etInternalMessage,
ntNoNotification,
"Бла-бла-бла "+lkError
);
if(fManager) fManager->ProcessEvent(pMyEvent);
else throw Exception("Exception");
return Result;
}


2Aractan пользуйтесь тэгами [CODE]
2Модератор ок, спасибо

Отредактировано Aractan — 17/06/2005, 13:51
Gedeon
Отправлено: 17.06.2005, 13:59


Ветеран

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



CODE

//...
Command.Head.BodyLen=0;
//..
Size=Command.Head.BodyLen;
short lkError=*((short*) (&(( (char*) (*Data) )[Size-2] ) ) ); //??????????

или что-то скрыто за
CODE

int Result=fCommandExchanger->Exchange(&Command);
?
Aractan
Отправлено: 18.06.2005, 13:59


Ученик-кочегар

Группа: Участник
Сообщений: 22



CODE

TMyEvent* pMyEvent = new TMyEvent(this, //вот тут ошибка возникает
etInternalMessage,
ntNoNotification,
"Бла-бла-бла "+lkError /////// !!!!!!!!!!!! вот тут косяк !!!!!!!!!!!!
);

т.е. судя по всему при выделении памяти происходит глюк из-за неправильн каких-то особенностей преобразования типов.
(AnisString)"Бла-бла-бла "+ (short)lkError — получается так нельзя делать.

AnsiString ErrorNo(lkError);
(AnisString)"Бла-бла-бла "+ ErrorNo — Так надо, ну или прямо там привести к AnsiString.

Отредактировано Aractan — 18/06/2005, 14:00

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