[求助]数组越界检查
procedure fun();var
n:Integer;
a:array[0..9]of Char;
begin
n:=10;
a[n]:='A';
dosomething;
end;
为什么编译器不报错?
在delphi版块的第四个问题,前三个都没人回答,真郁闷。以上哪个问题编译器不能检查出越界,但是运行时系统会报错,难道编译器不检查数组下标么?如果a[10]是能检查出来的,这里是不是有什么机制?我手上书有限,找不到答案。希望有人愿意给我解析下,谢谢。
还是静态分配的数组和动态数组一样?超出范围的索引在编译时都不会报告错误。
var
i,n:Integer;
a:array of Char;
begin
SetLength(a,10);
//n:=10;
for i:=Low(a) to High(a) do
a[i]:='a';
a[11100]:='b';
for i:=Low(a) to High(a)+66 do
Form1.Memo1.Lines.Add(a[i]);
end;
解决了,编译器不做语义检查,以后再也不在这里自言自语了
[此贴子已经被作者于2007-4-2 17:46:08编辑过]