对本地变量的访问冲突,但不是同一类型的全局变量

时间:2016-05-24 00:29:12

标签: memory-management global local pascal

我有两个版本的同一个函数,一个使用全局队列对象,另一个使用本地队列对象。具有本地的那个会引发内存访问错误:

版本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?

0 个答案:

没有答案