Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Array Access Violation (https://www.delphipraxis.net/107503-array-access-violation.html)

DeluxXx 28. Jan 2008 21:00


Array Access Violation
 
Hab ein Problem mit dem Zugriff auf die Attribute in einem Array .
Delphi-Quellcode:
private
VideoItemlist : array of TVideoItem ;
//...
implementation
//..
procedure TForm1.btAddToArray(Sender: TObject);
begin
 for i:=0 to ... -1 do
  begin
    //einlesen der werte
    //...
   setLength(VideoItemList,length(VideoItemList)+1) ;
   // in array schreiben
    VideoItemList[I] := TVideoItem.Create(lvVideos,Titel,Description,Rating) ;
  end ;
end;
procedure TForm1.auslesen() ;
begin
  Statusbar.Panels[0].Text := VideoItemList[0].getUrl ;
end;

end;
wenn ich jetzt versuche innerhalb der Methode btAddToArray auf das Item im Array zuzugreifen
klappt das Wunderbar . Jedoch nicht mehr in der Methode auslesen , ich versuche aber nicht auf ein Item zuzugreifen das nicht existiert (per länge des arrays überprüft). Kann es sein das der Speicher jedes mal freigegeben wird sobald ein neues Item hinzugefügt wurde ?
Edit hier noch das meiste von der Klasse TVideoItem
Delphi-Quellcode:
type TVideoItem = class
  private
    ltitel : String ;
    lRating : String ;
    lDescription : String ;
    lUrl : String ;
    lThumbnails : TThumbnaillist;
    lListItemIndex : Integer ;
  public
    property titel : String read ltitel write ltitel ;
    property Description : String read lDescription write lDescription ;
    property Url : String read lUrl write lUrl ;
    property Thumbnails : TThumbnaillist read lThumbnails write lThumbnails;
    property Rating : String read lRating write lRating ;
    function getUrl(): String ;
  published
    Constructor Create(listview : TListview;myTitel,myDescription : String;myRating : String);
  end;

implementation

 Constructor TVideoItem.Create(listview : TListview;myTitel,myDescription : String;myRating : String);
 var
 ListItem : TListItem ;
 begin
    lListItemIndex := listview.Items.Count ;
    Listitem := listview.Items.Add ;
    ListItem.Caption := '' ;
    Listitem.SubItems.Add(myRating) ;
    self.Rating := myRating ;
    ListItem.Subitems.Add(myTitel) ;
    self.titel := Titel ;
    ListItem.Subitems.Add(myDescription) ;
    self.Description := myDescription ;
 end;

SirThornberry 28. Jan 2008 21:10

Re: Array Access Violation
 
um dir zu antworten sehe ich zu wenig vom Quelltext. Allerdings sehe ich hier was völlig unnötiges:
Delphi-Quellcode:
setLength(VideoItemList,length(VideoItemList)+1) ;
Warum machst du sowas in der Schleife? Setzte das Array vor der Schleife gleich auf die richtige Größe um so die fragmentierung des Speichers zu vermeiden und auch das Programm nicht unnötig auszubremsen.

DeluxXx 28. Jan 2008 21:20

Re: Array Access Violation
 
Danke, da hast du natürlich Recht. Hab jetzt noch die Klasse TVideoItem gepostet vllt. hilft das ja weiter .

semo 28. Jan 2008 21:37

Re: Array Access Violation
 
versuche dich einmal daran deine klasse ohne listview zu verwalten.
die daten sind die eine seite, die darstellung die andere.
so könntest du deine videoitems zum beispiel auch anders verarbeiten, zum beispiel mit einem treeview, etc...

DeluxXx 28. Jan 2008 21:45

Re: Array Access Violation
 
Danke wobei ich das ja gar nicht machen kan,n da ja wenn ich aus einer anderen Methode versuch drauf zuzugreifen ich die Access Violation krieg .
:wall: Hm so problem ist gelöst die Array elemente auf die ich versucht hab zuzugreifen haben doch nicht existiert ... hing mit der If abfrage in der schleife zusammen ...

SirThornberry 29. Jan 2008 07:16

Re: Array Access Violation
 
du meinst sicher die if-Abfrage welche du uns verschwiegen hast ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:31 Uhr.

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