注册 登录
编程论坛 Delphi论坛

[求助]数组越界检查

anthony634 发布于 2007-04-02 16:31, 1374 次点击
procedure fun();
var
n:Integer;
a:array[0..9]of Char;
begin
n:=10;
a[n]:='A';
dosomething;
end;
为什么编译器不报错?
5 回复
#2
anthony6342007-04-02 17:06

在delphi版块的第四个问题,前三个都没人回答,真郁闷。以上哪个问题编译器不能检查出越界,但是运行时系统会报错,难道编译器不检查数组下标么?如果a[10]是能检查出来的,这里是不是有什么机制?我手上书有限,找不到答案。希望有人愿意给我解析下,谢谢。

#3
anthony6342007-04-02 17:13

还是静态分配的数组和动态数组一样?超出范围的索引在编译时都不会报告错误。
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;

#4
anthony6342007-04-02 17:42

解决了,编译器不做语义检查,以后再也不在这里自言自语了

[此贴子已经被作者于2007-4-2 17:46:08编辑过]

#5
xu20002007-04-02 22:20
Options->compiler->range checkingt选中试一下。
#6
anthony6342007-04-03 09:30
没用的,编译器是不可能知道变量的值的
1