Thema: Delphi Probleme mit FreeandNil

Einzelnen Beitrag anzeigen

Maurice

Registriert seit: 6. Feb 2008
2 Beiträge
 
#1

Probleme mit FreeandNil

  Alt 6. Feb 2008, 15:27
Moin,
ich nehme an so einem Turnier, organisiert von der Uni Kiel teil:
http://www.informatik.uni-kiel.de/so...2008/download/ (Version B, mit Trennung der Strategie)

Da ich leider selbst nicht allzuviel Ahnung vom Programmieren habe wende ich mich an euch und zwar:

Ich lege mir in der USimpleAI ein Record an mit allen möglichen Zügen:

TMovesWithPoints = record
move : TMove;
points : TSingleScoreData;
pointscount : Integer;
stoneindex : Integer;
ChuckNorris: Integer;

Und am Ende wird der "beste" Zug aus diesem Array ausgewählt (sprich der, bei dem der Chuck Norris Wert am höchsten ist ^^). Danach will ich das Record per Freeandnil wieder freigeben, jedoch bekomme ich dann jedesmal eine Fehlermeldung vom Server "Received Null String" Nu hab ich mich schlau gemacht und mir wurde gesagt, dass das Result nicht absolut gespeichert wird, sondern als Zeiger auf den Eintrag im Record, deshalb hab ich mir den Move als solchen mit allen Daten des besten Moves neu generiert:

function Finalmove(Move: TMove): TMove;
var stone: TStone;
f1, f2: Integer;
c1,c2: TCoordinate;

begin
f1:=move.stone.getSymbol(0);
f2:=move.stone.getSymbol(1);
Stone:= TStone.Stone(f1,f2);

c1:= move.getCoordinates[0];
c2:= move.getCoordinates[1];

result:= TMove.TMove(Stone,c1,c2);
end;

Und das Ergebnis dieser Funktion wird als Result der Hauptfunktion ausgespuckt und hinterher das Record freigegeben. Gibt aber trotzdem wieder diese Fehlermeldung. Ich hab mich per F7 mal durch den Code geklickert... Man kommt dabei in die CPU Ansicht des Freeandnil befehls und bevor (!) er ganz durch ist, kommt die Fehlermeldung vom Server "Received Null String". Dabei ist es egal, ob ich den Befehl vor oder nachs result:= setze.
Deshalb wundert mich das ganze auch so, der Ausgabewert dieser Funktion wird nämlich erst in der UNetwork letztlich weggeschickt, aber bis dahin kommt er erst garnicht, wenn ich das FreeAndNil drinlasse.

Wenn ihr noch irgendwelche Infos braucht, kein Problem.

Danke schonmal für Antworten, ohne die Freigabe kann ichs ziemlich vergessen, da ich nach 10 Zügen ne Speicherausnutzung von 500MB hab...

Gruß
Maurice
  Mit Zitat antworten Zitat