我有两个版本的同一个函数,一个使用全局队列对象,另一个使用本地队列对象。具有本地的那个会引发内存访问错误:
版本1:
procedure breadth_first_traversal(var t : tree);
var
cre : elementPtr;
crt : treePtr;
begin
queue_enqueue(tq, t);
while not queue_empty(tq) do
begin
cre := queue_dequeue(tq);
crt := cre^.load;
writeln(crt^.load);
if assigned(crt^.lt) then
begin
queue_enqueue(tq, crt^.lt^);
end;
if assigned(crt^.rt) then
begin
queue_enqueue(tq, crt^.rt^);
end;
end;
end;
版本2:
procedure breadth_first_traversal(var t : tree);
var
tree_queue : queue;
cre : elementPtr;
crt : treePtr;
begin
queue_enqueue(tree_queue, t);
while not queue_empty(tree_queue) do
begin
cre := queue_dequeue(tree_queue);
crt := cre^.load;
writeln(crt^.load);
if assigned(crt^.lt) then
begin
queue_enqueue(tree_queue, crt^.lt^);
end;
if assigned(crt^.rt) then
begin
queue_enqueue(tree_queue, crt^.rt^);
end;
end;
end;
抛出此错误:
An unhandled exception occurred at $000000000040037A :
EAccessViolation : Access violation
$000000000040037A
$0000000000400425
$0000000000400590
为什么版本1使用与tq
具有相同类型的全局变量tree_queue
而不是版本2?