Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi array of TImage ... length liefert einen ganz falschen Wert (https://www.delphipraxis.net/111535-array-timage-length-liefert-einen-ganz-falschen-wert.html)

faeX 4. Apr 2008 22:40


array of TImage ... length liefert einen ganz falschen Wert
 
mein problem ist folgendes:

Delphi-Quellcode:

procedure image_test;
var images : array of TImage;
begin
  ShowMessage(IntToStr(length(images))); // Ausgabe 0
  setLength(images,1);
  ShowMessage(IntToStr(length(images))); // Ausgabe 1
  images[0] := TImage.create(Form1);
  ShowMessage(IntToStr(length(images))); // Ausgabe 9843080
end;
was mach ich falsch?
bzw. was fehlt?

s.h.a.r.k 4. Apr 2008 22:44

Re: array of TImage ... length liefert einen ganz falschen W
 
Zunächst mal vorweg: Schau dir mal TList. Darin speicherst du normalerweise Objekt. Array würde ich nur für Integer, Strings, Boolean etc. nehmen, also keine Objekte.

Ich schau mir deinen Code allerdings mal an.

[edit=Christian Seehase]Beitrag wieder sichtbar gemacht. Mfg, Christian Seehase[/edit]

Muetze1 4. Apr 2008 22:45

Re: array of TImage ... length liefert einen ganz falschen W
 
Eigentlich nichts, aber ich vermute eher, dass Delphi diese Anweisung rausoptimiert und dir eine entsprechende Meldung gegeben hat beim compilieren. Kann das sein?

@s.h.a.r.k.: Äh, was?

busybyte 4. Apr 2008 22:46

Re: array of TImage ... length liefert einen ganz falschen W
 
@Muetze hast recht stimmt alles.
Bei mir Delphi2006 kommt 0,1,1 als Ergebniss,der Fehler liegt nicht an dem geposteten code

s.h.a.r.k 4. Apr 2008 22:47

Re: array of TImage ... length liefert einen ganz falschen W
 
:D ich hab einen Text verfasst und wenn ich ihn editiere, dann seh ich auch wieder meinen alten Text.

Hier mein Text nochmals

Zitat:

Zunächst mal vorweg: Schau dir mal TList. Darin speicherst du normalerweise Objekt. Array würde ich nur für Integer, Strings, Boolean etc. nehmen, also keine Objekte.

Ich schau mir deinen Code allerdings mal an.
PS: Ich hab D2007 und habe auch 0, 1, 1 als Ergebnis. Hab mich schon gewundert.

[EDIT]

*lol* nun gehts auf einmal und ich hab nicht mal ne andere Schriftfarbe als zuvor :D

OT: Was passiert, wenn ihr meinen oben stehenden Beitrag quoted?! Erscheint bei euch dann auch meine eigentliche Nachricht?

[/EDIT]

busybyte 4. Apr 2008 22:49

Re: array of TImage ... length liefert einen ganz falschen W
 
[OT]
//Edit
beim Quoten ist alles ok

Muetze1 4. Apr 2008 22:51

Re: array of TImage ... length liefert einen ganz falschen W
 
Zitat:

Zitat von s.h.a.r.k
Schau dir mal TList. Darin speicherst du normalerweise Objekt. Array würde ich nur für Integer, Strings, Boolean etc. nehmen, also keine Objekte.

Full ACK, aber einfacher geht sogar noch einfacher mit einer TObjectList.

Zitat:

Zitat von s.h.a.r.k
OT: Was passiert, wenn ihr meinen oben stehenden Beitrag quoted?! Erscheint bei euch dann auch meine eigentliche Nachricht?

Ja, da klappt alles.

s.h.a.r.k 4. Apr 2008 22:51

Re: array of TImage ... length liefert einen ganz falschen W
 
Zitat:

Zitat von busybyte
beim Quoten ist alles ok

Sorry, aber ich finde das zu geil :D muss ich mal Daniel sagen... Würde mich schon zu sehr interessieren an was es liegt.

faeX 4. Apr 2008 22:54

Re: array of TImage ... length liefert einen ganz falschen W
 
Delphi-Quellcode:

procedure c(anum, art : integer);
var
  anzahl : integer;
begin
  anzahl := length(a[anum].wunden);
  setLength(A[anum].c,anzahl + 1);
  A[anum].c[anzahl-1] := TImage.create(frmB);
  A[anum].c[anzahl-1].parent := frmB;

  // Text unwichtig

end;
das ist der orginaltext

faeX 4. Apr 2008 22:55

Re: array of TImage ... length liefert einen ganz falschen W
 
dort wo // text unwichtig steht wird mit length nochmal abgefragt

Muetze1 4. Apr 2008 22:58

Re: array of TImage ... length liefert einen ganz falschen W
 
Erstmal: Hast du die Bereichsprüfung eingeschaltet bei dem Projekt? Wenn nein, mach dies in den Projektoptionen->Compiler und erstelle das gesamte Projekt neu. Dann führe die Methode nochmal aus.

Zu deinem Code:
Delphi-Quellcode:

procedure c(anum, art : integer);
var
  anzahl : integer;
begin
  anzahl := length(a[anum].wunden);
  setLength(A[anum].c,anzahl + 1);
  A[anum].c[anzahl-1] := TImage.create(frmB);
  A[anum].c[anzahl-1].parent := frmB;

  // Text unwichtig

end;
- Wieso ermittelst du die Länge von Wunden um dann c auf diese Länge + 1 zu setzen?
- Eintrag Anzahl-1 ist nicht richtige Index, sondern Anzahl ist der letzte Index. Du hast ja auf Anzahl + 1 die Größe gesetzt.

Kleines Rechenbeispiel:
-> Anzahl wird mit 0 ermittelt
-> Du setzt c auf Anzahl + 1, also eine Länge von 1
-> Du greifst auf -1 zu, da du Anzahl - 1 nimmst

Mit der Bereichsprüfung hätte er dir das zur Laufzeit um die Ohren gehauen!

Du zerschiesst dir jetzt den Speicher, das kann unvorhersehbare Folgen haben, da du wild fremden Speicher editierst (fremd im Sinne der nicht eigentlich anvisierten Variablen).

faeX 4. Apr 2008 23:00

Re: array of TImage ... length liefert einen ganz falschen W
 
da gibt es ein problem:

mein delphi bockt wenn ich das programm direkt in delphi starten will ich muss es erst zur exe compilieren und dann starten

Muetze1 4. Apr 2008 23:03

Re: array of TImage ... length liefert einen ganz falschen W
 
Zitat:

Zitat von faeX
da gibt es ein problem:

Nein, das ist definitiv kein Problem:

Zitat:

Zitat von faeX
mein delphi bockt wenn ich das programm direkt in delphi starten will ich muss es erst zur exe compilieren und dann starten

Das ist eine Exception, die wird trotzdem erscheinen.

Und selbst wenn, du kannst den Prozess im Explorer starten und dann in Delphi zu dem Prozess attachen und debuggen. (Attach zu Prozess, bzw. Mit Prozeß verbinden).

faeX 4. Apr 2008 23:04

Re: array of TImage ... length liefert einen ganz falschen W
 
danke, habt mir sehr geholfen!

busybyte 4. Apr 2008 23:06

Re: array of TImage ... length liefert einen ganz falschen W
 
Zitat:

Zitat von faeX
da gibt es ein problem:

mein delphi bockt wenn ich das programm direkt in delphi starten will ich muss es erst zur exe compilieren und dann starten

Du machst mich neugierig auf Deine Delphiversion/Betriebssystem
//Edit
ok ich halt mich raus Muetze ist der bessere Delphin

Muetze1 4. Apr 2008 23:07

Re: array of TImage ... length liefert einen ganz falschen W
 
Zitat:

Zitat von faeX
danke, habt mir sehr geholfen!

Ist denn das Problem an sich erledigt?


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:11 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