-1

在 roboguide 中运行 karel 程序时,会发生堆栈溢出错误,即使没有递归。roboguide没有提供其他信息。

4

1 回答 1

0

检查 Karel 手册的“堆栈使用”部分

执行程序时,除非您指定堆栈大小,否则会分配 300 个字的堆栈。堆栈是从可用的用户 RAM 中分配的。堆栈使用量可以按如下方式计算: • 每个调用(或函数引用)至少使用五个堆栈字。• 此外,对于例程中的每个参数和局部变量,会使用堆栈上的额外空间,具体取决于变量或参数类型,如中所示

首先尝试增加程序的堆栈大小(在 PROGRAM 关键字下添加)

%STACKSIZE = 4000

其次,正如手册所述,堆栈大小包括所有参数(手册中有一个表格指定了每种数据类型的大小)。就我而言,罪魁祸首是我大量使用字符串变量声明

VAR
   msg:STRING[200]
   even_worse:ARRAY[10] OF STRING[200]

字符串参数可以快速加起来,尤其是字符串数组。确保您只声明您需要的内容,或者如果不是严格需要,最好不要使用局部变量。在 Fanuc 的 Karel 中,堆栈空间很紧,让一切都变得重要。

于 2020-07-17T07:51:41.117 回答