Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Invalid Pointer TObjectList (https://www.delphipraxis.net/119010-invalid-pointer-tobjectlist.html)

bl3nder 19. Aug 2008 14:13


Invalid Pointer TObjectList
 
Hi Leute,

Ich checks einfach nicht wo der Fehler liegen kann:

Ich möchte meine Objekte und Listen alle freigeben, weil sich das Programm sonst extrem aufbläht.

Hier ein Auszug meines Codes:

Delphi-Quellcode:

    FList := TObjectList.Create;
    FCSearch := Model.TComputerSearch.Create;
    FMyCCriteria := Model.TComputerAttributes.Create;

    //...


    FList := FCSearch.DBSearch('vague',FMyCCriteria); // FList wird mit "TComputer"-Objekten befüllt

    I := 0;
    while (I<FList.Count-1) do
      begin
        FMyComputer := Model.TComputer.Create;
        FMyComputer := FList[I] as Model.TComputer;

        // Fill the Grid with the information of the FMyComputer object
        Grid.Cells[0,Grid.RowCount-1] := IntToStr(FMyComputer.GetAttributes.GetID);
        Grid.Cells[1,Grid.RowCount-1] := FMyComputer.GetAttributes.GetName;
        Grid.Cells[2,Grid.RowCount-1] := FMyComputer.GetAttributes.GetComment;
        Grid.Cells[3,Grid.RowCount-1] := FMyComputer.GetAttributes.GetModel;

        Grid.RowCount := Grid.RowCount +1;

        FMyComputer.Free;
        Inc(I);
      end;

  FList.Clear; // UNGÜLTIGE ZEIGEROPERATION
  FList.Free; // UNGÜLTIGE ZEIGEROPERATION

  FCSearch.Free;
  FMyCCriteria.Free;
Das Programm läuft trotz des Fehlers aber den Fehler möchte ich natürlich wegbekommen

Weiß einer Rat ?

Deep-Sea 19. Aug 2008 14:17

Re: Invalid Pointer TObjectList
 
TObjectList gibt alle Objekte die es enthält selber frei - außer man instantiiert es mit AOwnsObjects = False :wink:

[edit]Parametername korrigiert.[/edit]

bl3nder 19. Aug 2008 14:25

Re: Invalid Pointer TObjectList
 
Ok Vielen Dank, wusste ich nicht.

Apollonius 19. Aug 2008 14:30

Re: Invalid Pointer TObjectList
 
FMyCompuer musst du auch nicht erzeugen, bevor du auf die Liste zugreifst. Sonst hast du ein Speicherleck.

bl3nder 19. Aug 2008 14:31

Re: Invalid Pointer TObjectList
 
Hmm ok danke schonmal guter Anfang die Lecks zu finden. Ich weiß sonst echt nicht mehr wo die 3KB pro DB abfrage herkommen :/

Deep-Sea 19. Aug 2008 14:32

Re: Invalid Pointer TObjectList
 
Zitat:

Zitat von bl3nder
Hmm ok danke schonmal guter Anfang die Lecks zu finden. Ich weiß sonst echt nicht mehr wo die 3KB pro DB abfrage herkommen :/

Autsch, na dann mal viel Glück beim Suchen ...
PS: Try-finally nutzen :wink:

Neutral General 19. Aug 2008 15:53

Re: Invalid Pointer TObjectList
 
Zitat:

Zitat von Apollonius
FMyCompuer musst du auch nicht erzeugen, bevor du auf die Liste zugreifst. Sonst hast du ein Speicherleck.

Das Gleiche gilt für FList ;)

bl3nder 20. Aug 2008 09:18

Re: Invalid Pointer TObjectList
 
Zitat:

Zitat von Neutral General
Zitat:

Zitat von Apollonius
FMyCompuer musst du auch nicht erzeugen, bevor du auf die Liste zugreifst. Sonst hast du ein Speicherleck.

Das Gleiche gilt für FList ;)

Kann ich nicht bestätigen. Habe durch das Weglassen von

Delphi-Quellcode:
FList := TObjectList.Create;
eine Adressverletzung bekommen... ?

Neutral General 20. Aug 2008 09:20

Re: Invalid Pointer TObjectList
 
Hi,

Delphi-Quellcode:
FList := TObjectList.Create;
FCSearch := Model.TComputerSearch.Create;
FMyCCriteria := Model.TComputerAttributes.Create;

  //... Sollte hier zwischen nicht mit FList gearbeitet werden dann ist obiges Create überflüssig und erzeugt ein Speicherleck
  // WENN hier mit FList gerarbeitet wird, dann muss es aber vor der Zeile hier unten wieder freigegeben werden.
  // Sonst gibts ebenfalls ein Speicherleck!

FList := FCSearch.DBSearch('vague',FMyCCriteria); // FList wird mit "TComputer"-Objekten befüllt

Deep-Sea 20. Aug 2008 09:22

Re: Invalid Pointer TObjectList
 
Zitat:

Zitat von bl3nder
Habe durch das Weglassen von

Delphi-Quellcode:
FList := TObjectList.Create;
eine Adressverletzung bekommen... ?

Vlt. weil du zwischen "FList := TObjectList.Create;" und "FList := FCSearch.DBSearch('vague',FMyCCriteria);" auf FList zugreifst?! Sry, wir kennen deinen Code ya nicht :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:57 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz