AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

AV bei dynamischen Array

Offene Frage von "jaschu"
Ein Thema von jaschu · begonnen am 30. Sep 2005 · letzter Beitrag vom 30. Sep 2005
Antwort Antwort
jaschu

Registriert seit: 21. Mär 2005
38 Beiträge
 
#1

AV bei dynamischen Array

  Alt 30. Sep 2005, 18:41
So, habe mal mein Problem von 2 Threads weiter unten stark vereinfacht.
Bei Hinzufügen eines Strings tritt eine Zugriffsverletzung auf, wenn man das Programm schließt.

Delphi-Quellcode:

unit tmp3list;

interface

type
  dsatz = record
            t0 : String[200];
            t1, t2 : Integer;
          end;
  mp3list = class
              private
                items : array of Dsatz;
                function getcount : Integer;
              public
                property count: Integer read GetCount;
                procedure addsingle(str : String);
                procedure readsingle(pos : Integer; var str : String);
                procedure new;
             end;
implementation


function mp3list.getcount : Integer;
begin
  result := length ( items );
end;

procedure mp3list.addsingle(str : String);
begin
  setlength(items, length(items)+1);
  items[length(items)].t0 := str;
end;

procedure mp3list.readsingle(pos : Integer; var str : String);
begin
  str := items[pos].t0;
end;

procedure mp3list.new;
begin
  setlength(items, 0);
end;
end.
Aufruf:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var test : mp3list;
begin
  test.Create;
  test.new;
  test.addsingle('bla');
  showmessage(inttostr(test.count));
end;
Projekt: Klick

Weiß jetzt hier jemand Rat?

Danke schonmal und nen schönen Abend noch!

Jaschu
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: AV bei dynamischen Array

  Alt 30. Sep 2005, 19:21
Hi Jaschu,

Zitat von jaschu:
Bei Hinzufügen eines Strings tritt eine Zugriffsverletzung auf, wenn man das Programm schließt.
das ist die Fehlerklasse "off-by-one" - mach das besser so:

Delphi-Quellcode:
procedure mp3list.addsingle(str : String);
begin
  setlength(items, length(items)+1);
  items[High(items)].t0 := str;
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#3

Re: AV bei dynamischen Array

  Alt 30. Sep 2005, 19:47
Zwei Dinge sind mir aufgefallen:

1) Es ist besser, eigenen Datentypen im Quelltext ein T voranszustellen. Das ist eine sinnvolle Konvention, die den Quelltext leichter lesbar macht.

2) Du möchtest ein Objekt der Klasse mp3list erzeugen, das geht so: test := mp3list.Create; Gruß, teebee

EDIT: Achja, ein drittes noch: Du solltest test auch wieder freigeben, sonst ensteht ein Speicherleck.
Ist zwar wohl nur experimenteller Code, aber egal...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:30 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