Virtual machine “错误”;“段空间外”;在VMEmulator中,由Jack中的getter方法引起
我正在为NAND2TTERIS做一个项目。我们用Jack编写了一个程序,并在VMEmulator上进行了测试。该类如下所示:Virtual machine “错误”;“段空间外”;在VMEmulator中,由Jack中的getter方法引起,virtual-machine,nand2tetris,Virtual Machine,Nand2tetris,我正在为NAND2TTERIS做一个项目。我们用Jack编写了一个程序,并在VMEmulator上进行了测试。该类如下所示: class List { field int data; field List next; /* Creates a new List object. */ constructor List new(int car, List cdr) { let data = car; let next = cdr;
class List {
field int data;
field List next;
/* Creates a new List object. */
constructor List new(int car, List cdr) {
let data = car;
let next = cdr;
return this;
}
/* Disposes this List by recursively disposing its tail. */
method void dispose() {
if (~(next = null)) {
do next.dispose();
}
// Use an OS routine to recycle the memory held by this object.
do Memory.deAlloc(this);
return;
}
/* Prints the list*/
method void print() {
do Output.printString(" -> ");
do Output.printInt(data);
if (~(next = null)) {
do next.print();
}
return;
}
/* Inserts the argument in the right position of the list (ascending order)*/
method void insertInOrder(int ins){
var List prev, curr, insert;
let prev = this;
let curr = prev.getnext();
while (ins > prev.getdata()){
if (ins < curr.getdata()){
let insert = List.new(ins, curr);
do prev.setnext(insert);
}
else{
let prev = prev.getnext();
let curr = prev.getnext();
}
}
return;
}
/* Searches the argument in the list, if found, it returns the corresponding List object*/
method List find(int toFind){
var List temp;
var List equal;
var boolean found;
let temp = this;
let found = false;
while (~(next = null)){
if(toFind = temp.getdata()){
let equal = temp;
let found = true;
}
let temp = temp.getnext();
}
if (found){
return equal;
}
else{
return null;
}
}
method List getnext(){
return next;
}
method void setnext(List object){
let next = object;
return;
}
method int getdata(){
return data;
}
}
错误出现在第4行返回
。当我更改插孔代码时,第4行仍然存在相同的错误
“我的getter方法”中的具体问题是什么?在VMEmulator上运行VM程序时,必须首先手动设置指向各个段的指针,否则可能会出现“段空间不足”错误。 要了解必要的设置,请查看相应的.tst文件的功能。另一种方法是在函数中插入建议的代码,因为函数调用会自动进行此类设置
0function List.getdata0
1push argument0
2pop pointer0
3push this 0
4return