依旧是个Access violation问题
打开codeguard,调试程序过程中出现 raised exception class EAccessViolation with message 'Access violation at address 7C97CD02 in module 'ntdll.dll'. Write of address 00000014 警告。查看cpu信息,跳到 rtl60.@System@@GetMem$qqri入口的下面call rtl60.@System@Error$qqr20System@TRuntimeError:
40002FDB 00EB add bl,ch
40002FDD 0233 add dh,[ebx]
40002FDF DB db 0xdb
40002FE0 8BC3 mov eax,ebx
40002FE2 5B pop ebx
40002FE3 C3 ret
40002FE4 53 push ebx
40002FE5 85C0 test eax,eax
40002FE7 7415 jz +0x15
40002FE9 FF1538F00540 call dword ptr [0x4005f038]
40002FEF 8BD8 mov ebx,eax
40002FF1 85DB test ebx,ebx
40002FF3 740B jz +0x0b
40002FF5 B002 mov al,0x02
40002FF7 E8B4010000 call rtl60.@System@Error$qqr20System@TRuntimeError
环境:BCB6.0+sp4,SQLServer 2000数据库,Ehlib3.4,TAdvStringgrid等
千万别说new了没delete。以前普通编程错误codeguard会直接指引到出错的地方,很方便调试,但此次因对汇编不懂,请大侠指点迷津。。
[解决办法]
操作系统是哪个?
[解决办法]
从上面信息很难判断怎么回事的.
[解决办法]
这不是new了没有delete的症状,看起来,倒象是访问了一个没有初始化(值为NULL)的对象。
[解决办法]
不能看到哪行代码一起的
[解决办法]
GetMem貌似确实是分配内存啊。
调用栈再往上是神马?
[解决办法]
关掉socket服务,重新编译。
[解决办法]
你给String赋值时是直接用:State[xxx]=str
么?如果是,可以看看那个xxx是多少:)
可以用OutputDebugString来输出到调试窗口:)