关于freepascal的奇怪错误问题

来源:百度知道 编辑:UC知道 时间:2024/09/21 18:13:35
今天用freepascal做题目发生了一个奇怪的错误,高手请指教啊

在一个子程序中:
procedure dp;
var
i,j,k:longint;
begin
fillchar(list,sizeof(list),0);
fillchar(f,sizeof(f),0);
for i:=1 to n do
......

【list和f数组都是全局变量,这样就可以运行】

而当这样的时候:
procedure dddp;
var
i,j,k:longint;
f:array [0..250,0..250] of longint;
list:array [0..250] of longint;
begin
fillchar(list,sizeof(list),0);
fillchar(f,sizeof(f),0);
for i:=1 to n do
.....

【运行时出现202错误,单步调试不能执行子程序】

堆栈溢出了??不要浪费这个问题。。

Free Pascal是个由国际组织开发的完全的win32的pascal语言编译器,类似delphi,可编写windows程序。
目前,该项目的网站为www.freepascal.org,最新版本为2系列。
此前被广泛使用的PASCAL编译器普遍为Turbo Pascal & Borland pascal。但是它们可用的空间十分有限。而Free Pascal理论上可以使用4GB内存。所以在利用Free Pascal编程的时候,可以改变原有思路,将大量时间转嫁给空间,提高效率。
虽然Free Pascal尽量设计得和Turbo Pascal接近,但是由于以下的两个原因,两者之间还是有一些区别的:
1. Free Pascal是一个32位的编译器,而Turbo Pascal只是16位编译器;
2. Free Pascal是一个跨平台的编译器,而Turbo Pascal只在windows上使用。
如果你的代码是遵守ANSI Pascal的,那么代码从Turbo Pascal移植到Free Pascal是没有问题的。
下面是在Turbo Pascal上可以使用,但是在Free Pascal就不能使用的一些语言特性:
1. 函数和过程在使用时,参数的类型必须和定义时完全一致。原因是在Free Pascal中添加了函数重载功能。
2. PROTECTED,PUBLIC,PUBLISHED,TRY,FINALLY,EXCEPT,RAISE成为了关键字,因此不能作为函数和过程的名字。
3. FAR,NEAR不再是关键字了。原因是Free Pascal是32位系统,不再需要这些关键字。
4. 布尔表达式不一定要全部进行计算。只要最终结果已经能够确定,就不再计算其它还没有计算的部分了。比如布尔表达式exp1 AND exp2 AND exp3,如果已知exp1的结果是false,那么怎么表达式的结果肯定是false,exp2