0

「GameMap[i、j、k].Items[m].Index」または「GameMap[i、j、k]のように呼び出して、データ(以前に追加したもの)を取得するために配列の配列を作成しようとしています]。カウント"

私のデルファイの型部分は次のようになります。

type
 TItemRec = record
 Index: Integer;
 Volume: Integer;
 Count: Integer;
 Id: string;
end;
TMApRec = record
  ID: LongWord;
  Count: integer;
  Order1: integer;
  Order2: integer;
  Order3: integer;
  Order4: integer;
  Order5: integer;
  Order6: integer;
  Order7: integer;
  Order8: integer;
  Order9: integer;
  Order10: integer;
  Items: array[0..9] of TItemRec;
end;

TMap = class

GameMap : array[0..8,0..14,0..$12] of TMapRec; 

たとえば、今なら:

procedure TMap.Update;
 var
  i,j,k,m: integer;
 begin
  i:=0;
  while i < 8 do
  begin
   j:=0;
   while j < 14 do
   begin
    k:=0;
     while k < $12 do
     begin
      m:= 0;
      while m < 10 do
      begin
       showmessage('asdf');
       GameMap[i,j,k].Items[m].Id:= (inttostr(i)+' '+inttostr(j)+' '+inttostr(k)+' '+inttostr(m));
       showmessage((GameMap[i,j,k].Items[m].Id));
       inc(m);
      end;
      inc(k);
     end;
     inc(j);
    end;
    inc(i);
   end;

最初の showmessage('asdf') のみが表示されますが、ここでクラッシュします。強調表示したい場合は完全なコードがありますhttp://pastebin.com/xfL94QXU

お時間をいただきありがとうございました。

4

2 に答える 2

1

コードで実行時エラーが発生する唯一の方法は、 のインスタンスのインスタンス化に失敗した場合ですTMap

を呼び出すコードはUpdate次のようになっていると思われます。

var
  Map: TMap;
begin
  Map.Update;
end;

が初期化されていないため、これは失敗しMapます。次のように修正します。

var
  Map: TMap;
begin
  Map := TMap.Create;
  try
    Map.Update;
  finally
    Map.Free;
  end;
end;

より一般的なアドバイスとして、Short, Self Contained, Correct (Compilable), Exampleの作成方法について読むことを強くお勧めします。

于 2013-04-23T08:11:12.907 に答える