| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1366 人关注过本帖
标题:[求助]数组越界检查
只看楼主 加入收藏
anthony634
Rank: 6Rank: 6
来 自:西南交大
等 级:贵宾
威 望:24
帖 子:653
专家分:10
注 册:2006-6-8
结帖率:100%
收藏
 问题点数:0 回复次数:5 
[求助]数组越界检查
procedure fun();
var
n:Integer;
a:array[0..9]of Char;
begin
n:=10;
a[n]:='A';
dosomething;
end;
为什么编译器不报错?
搜索更多相关主题的帖子: 越界 检查 procedure array 
2007-04-02 16:31
anthony634
Rank: 6Rank: 6
来 自:西南交大
等 级:贵宾
威 望:24
帖 子:653
专家分:10
注 册:2006-6-8
收藏
得分:0 

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

2007-04-02 17:06
anthony634
Rank: 6Rank: 6
来 自:西南交大
等 级:贵宾
威 望:24
帖 子:653
专家分:10
注 册:2006-6-8
收藏
得分:0 

还是静态分配的数组和动态数组一样?超出范围的索引在编译时都不会报告错误。
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-04-02 17:13
anthony634
Rank: 6Rank: 6
来 自:西南交大
等 级:贵宾
威 望:24
帖 子:653
专家分:10
注 册:2006-6-8
收藏
得分:0 

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

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

2007-04-02 17:42
xu2000
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:51
帖 子:3890
专家分:56
注 册:2006-4-8
收藏
得分:0 
Options->compiler->range checkingt选中试一下。

我会拿出我全部的钱财,以保你衣食无忧。我会献出我所有的智慧,以助你一帆风顺。我会想到所有的笑语,以令你展眉开颜。我会挤出最长的时间,以使你终生幸福。        [本人原创的结婚宣言]
2007-04-02 22:20
anthony634
Rank: 6Rank: 6
来 自:西南交大
等 级:贵宾
威 望:24
帖 子:653
专家分:10
注 册:2006-6-8
收藏
得分:0 
没用的,编译器是不可能知道变量的值的
2007-04-03 09:30
快速回复:[求助]数组越界检查
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027559 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved