请问delphi中的try...except格式中如何获得except非法值?(100分)

  • 主题发起人 主题发起人 liao123
  • 开始时间 开始时间
L

liao123

Unregistered / Unconfirmed
GUEST, unregistred user!
我的代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
perr:pchar;
begin

Getmem(perr,20);
try
for i:=0 to 10do
strcat(perr,'111111');
edit1.text:='ok!!!';
except
edit1.text:='err!!!';
end;

end;

请问各位朋友,程序中明明perr越界了,但为何程序
的edit1.text的值并没有等于'err!!!',请问为什么?
 
这个问题的原因是这样的:
您用GetMem申请了20各自借,但是系统一次分配给你的程序的最小内存单位并不是20个字节,一般是4K,所以还是有一些空间可以超越而不发生致命错误的
 
delphi对PCHAR只是分配相关地址,并不检查以后付植是否超越边界,
使用STRING就会出错。
 
应该是越界了,我试了一下,出了几个不同的错误!err还是出不来,直接就是非法操作了。
 
except非法值的获得,可以从出错信息获得或将程序编译从VIEW下的BROWSER中查找
except的非法值。就可以获的出错信息,使程序按照所想的
except
on errordo
...
 
sherman说的比较有道理,因为非法占用别人的内存,并不一定立即产生异常,
只有当被占用的那个变量被访问时,才会产生异常.
而指针越界一般是不检查的,这和C很相像.
 
后退
顶部