2

How can i Initial This Code?

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

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

i use this way :

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

But I have Error in Memory For this access:

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;

How Can I Initial Cnode ?

4

1 回答 1

3

您没有pcnArr[i]在 ShowMessage 之前进行初始化。所以你得到“访问冲突”错误。

所以你应该初始化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;
于 2013-08-13T14:11:46.133 回答