Delphi中指针指针的初始数组

时间:2013-08-13 13:58:11

标签: delphi pointers hashtable

我如何初始化此代码?

type
  PPNode = ^PNode;
  PNode  = ^Node;
  CNode = array of PPNode;

  Node = record
    key: Integer;
    next: PNode;
    prev: PNode;
  end;

我用这种方式:

function TForm1.chained_hash_init(n: Integer): CNode;
var
  A: Cnode;
begin
  ...
  SetLength(A, N);
  Result := A;
  ...
end;

但我的内存错误对于此访问:

procedure TForm1.btn1Click(Sender: TObject);
var
  pcnArr: CNode;
begin    
  SetLength(pcnArr, 19);
  pcnArr := chained_hash_init(19);
  ShowMessage( IntToStr(pcnArr[i]^^.key)) );     // I have Problem Here :(     
end;

我如何初始Cnode?

1 个答案:

答案 0 :(得分:3)

您没有在ShowMesage之前初始化pcnArr[i]。因此,您会收到“访问冲突”错误。

所以你应该初始化pcnArr,例如:

function TForm1.chained_hash_init(n: Integer): CNode;
var
  A: Cnode;
  i:integer;
  P:PNode;
begin
  ...
  SetLength(A, N);

  for i:=0 to N-1 do
  begin
    new(A[i]);
    new(A[i]^);
    with A[i]^^ do
    begin
        key:=0; 
        next:=nil; 
        prev:=nil; 
    end;  
  end;

  Result := A;
  ...
end;