Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Exception Zugriffsverletzung bei Setlength(Array..[erledigt]


rokdd - Mo 09.02.04 13:32
Titel: Exception Zugriffsverletzung bei Setlength(Array..[erledigt]
Hallo,
das problem habe ich größtenteils schon in der überschrift beschrieben. ich möchte die länge eines dynamischen arrays auf length setzen, dabei tritt aber eine exception zugriffsverletzung auf:


Delphi-Quelltext
1:
setlength(books,(length(books)+length(temp)));                    


beim debuggen ergeben die beiden längen zusammen addiert 5. wenn man aber jetzt


Delphi-Quelltext
1:
setlength(books,5);                    


schreibt funzt es! der fehler triit auch nicht immer auf! kann mir jemand helfen???

Rokdd


Delete - Mo 09.02.04 13:39

hmmm... sind die beiden Arrays denn auch schon initialisiert ? ich meine... hast du in beiden schon elemente drin ? denke mal, dass temp auch ein dynamischer array sein soll...

handelt es sich bei den elementen der arrays um Klassen oder um Records ?

tritt das beim verkleinern und/oder erweitern des arrays auf ?

;)


rokdd - Mo 09.02.04 13:43

die elemente sind nur teilweise gefüllt!
Folgenden type haben beide arrays(und beide dynamisch):

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
type
Tbook=Record
titel:ansistring;
RSN:ansistring;
BC:ansistring;
Autor:ansistring;
Status:integer;
kommentar:ansistring;
bibo:integer;
sprache:integer;
datum:TDatetime;
category:integer;
id:integer;
end;

Der fehler tritt beim vergrößern auf!

Rokdd


Delete - Mo 09.02.04 16:41

Vom Gefühl her würde ich sagen, es liegt daran, dass du AnsiStrings benutzt. Versuch es mal mit ShortStrings oder leg die Größe direkt fest.


rokdd - Mo 09.02.04 17:15

welche größe soll ich direkt festlegen? die des arrays oder der der ansistrings? gibt es betimmte stellen wo es sich auf jeden fall empfiehlt die größe festzulegen? also an einer stelle tritt immer der gleiche fehler auf:
nach dem 4 zeichen im titel wird ein '#0#0#0#0' eingefügt und der eigentliche text an der stelle überschreiben danach geht es normal weiter!
Hilft das??

rokdd


Delete - Mo 09.02.04 19:55

Habe ich mich echt so shclecht ausgedrückt? Ich habe geschrieben:
Zitat:

es liegt daran, dass du AnsiStrings benutzt. Versuch es mal mit ShortStrings oder leg die Größe direkt fest.

Ich dachte, es wäre klar, dass ich mich beide Mal auf deine String-Variablen bezogen habe.


rokdd - Mo 09.02.04 20:59

ja sorry! tut mir leid! werde das mal probieren!
Hilft dir der hinweis den ich letztens gepostet habe???


Rokdd