codeguard太强了,只是这个错误不知如何解决

ppzhao 2003-06-14 09:45:21
Error 00001. 0x130C10 (Thread 0x0DB0):
Method called on illegally casted object: Attempt to access 216 byte(s) at
0x00F46E34. The 'this' pointer points to heap block 0x00F46E34 which is only
212 bytes long.
Call Tree:
0x00405C2A(=NewInterFacePjt.exe:0x01:004C2A) D:\BORLAND\CBUILDER5\INCLUDE\VCL\ADODB.hpp#261
0x00405B15(=NewInterFacePjt.exe:0x01:004B15) F:\NewInterfaceBeta2.5_走读\MainFace.cpp#173
0x40053323(=VCL50.BPL:0x01:052323)
0x4005301F(=VCL50.BPL:0x01:05201F)
0x4005ABFC(=VCL50.BPL:0x01:059BFC)
0x00401645(=NewInterFacePjt.exe:0x01:000645) F:\NewInterfaceBeta2.5_走读\NewInterFacePjt.cpp#56

The memory block (0x00F46E34) [size: 212 bytes] was allocated with SysGetMem
Call Tree:
0x40002C3A(=VCL50.BPL:0x01:001C3A)
0x4002A8B2(=VCL50.BPL:0x01:0298B2)
0x4002AAFE(=VCL50.BPL:0x01:029AFE)
0x4002AA3D(=VCL50.BPL:0x01:029A3D)
0x40030B3E(=VCL50.BPL:0x01:02FB3E)
0x40053566(=VCL50.BPL:0x01:052566)

------------------------------------------
F:\NewInterfaceBeta2.5_走读\MainFace.cpp#173代码如下
在FormCreate里面
ADOConnection1->ConnectionString = m_ConnectionString;
try
{
ADOConnection1->Open();
}
catch(...)
{
Application->MessageBox("数据库打开失败!","错误信息",MB_OK | MB_ICONINFORMATION);
Application->Terminate();
}
D:\BORLAND\CBUILDER5\INCLUDE\VCL\ADODB.hpp#261 代码如下:
inline void __fastcall Open() { inherited::Open(); }
F:\NewInterfaceBeta2.5_走读\NewInterFacePjt.cpp#56 代码如下:
Application->CreateForm(__classid(TFrmMainFace), &FrmMainFace);

这个提示错误的确有错误,我在用codeguard之前就发现,不知为何,如果数据库连接失败,按道理应该提示失败,程序结束
可是他还出来其他乱七八糟的错误,数据库连接成功,就没有什么问题。其实还是隐藏错误,codeguard给我找出来了,只是不知道如何着手解决,看代码看不出什么问题,忘大侠帮助

只剩下最后一个错误了,各位帮帮忙
程序特殊,第一次这么认真,一个错误也不放过


...全文
92 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
BCB 2003-06-16
  • 打赏
  • 举报
回复
codeguard邦我发现了有new没delete 的地方,
但 Validate the 'this' pointer on member function entry
这一项不去掉,会出现ADO有关的错误,好象与我的代码无关,不得不关掉这一项,
否则,老报错

zcchm 2003-06-16
  • 打赏
  • 举报
回复
我想可能是对象尚未创建,你就访问他
zcchm 2003-06-16
  • 打赏
  • 举报
回复
这段代码在什么事件里写的?
ppzhao 2003-06-15
  • 打赏
  • 举报
回复
好像不是我上述原因
实在搞不懂啊
ppzhao 2003-06-14
  • 打赏
  • 举报
回复
ADOConnection1->Open();这句执行失败后有个异常

Access violation at address 40030BF0 in module 'vcl50.bpl'.Read of address 00000010'

ADOConnection1->Open();则无异常

这可能就是codeguard报错的原因

但是这是为什么,我一直不明白
自己建立个小程序测试,虽然codeguard也报错,但是数据库连接不上也不会有这个异常的
IT-司马青衫 2003-06-14
  • 打赏
  • 举报
回复
这些 放在构造函数中看看
ppzhao 2003-06-14
  • 打赏
  • 举报
回复
try
{
ADOConnection1->Open();
}
catch(...)
{
Application->MessageBox("数据库打开失败!","错误信息",MB_OK | MB_ICONINFORMATION);
Application->Terminate();
}
新建一个简单的工程,写上述几句
开codeguard
也会报错
各位老大,怎么回事?
我用的是bcb5
ppzhao 2003-06-14
  • 打赏
  • 举报
回复
找到错误原因了
不能用Application->Message()
可以用ShowMessage()

但不知什么原因,这可折腾了半天,呵呵
但愿谁能告知为什么?

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧