Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Schrott im Array (https://www.delphipraxis.net/168587-schrott-im-array.html)

yss14 29. Mai 2012 20:48

Schrott im Array
 
Guten Abend :)
Ich hab ein Array, welches Werte von anderen Arrays Werte bekommt. Welche hängt allerdings vom Ablauf des Programms ab. Das Array selber haben ich vorher mit 0en gefühlt. Nun kommt es aber manchmal vor, dass an Stellen im Array Schrott steht, irgendwelche wild zusammengewürfelten Zahlen wie '453435356'. In der Schule hat uns der Lehrer erzählt, dass es manche Programmiersprachen gibt, in denen man vorsichtshalber jedes Array vorher befühlen sollte, da sonst andere Werte vom Arbeitsspeicher drin stehen. Ist das bei Delphi auch so?

Luckie 29. Mai 2012 20:50

AW: Schrott im Array
 
Du initialisierst es doch schon.

yss14 29. Mai 2012 20:52

AW: Schrott im Array
 
Ja, aber während dem Ablauf des Programms bekommt es andere Werte von mind. 10 anderen Arrays, die vielleicht nicht initialisiert sind, d.h. der Schrott wird dann in das Array geschrieben, falls es bei Delphi so ist. Z.b. bei Java kann kein Schrott aus dem Ram im Array stehen.

himitsu 29. Mai 2012 20:54

AW: Schrott im Array
 
Wie ist das Array definiert?
Wie werden die Werte zugewiesen?
Wie wurden die anderen Arrays initialsiert/befüllt?
Wie ........

Es hängt vom Typen ab.
- Strings (außer ShortString), Interfaces, dynamische Arrays (nur der Arrayzeiger selber, aber nicht unbedingt der Inhalt) und Variants werden immer initialsiert,
also alle Typen welche über eine automatische/dynamische Speicherverwaltung verfügen.

Es hängt vom Ort ab.
- globale Variablen werden immer initialisiert
- Objekt-Felder werden immer initialisiert
- lokale Variablen werden NICHT initialisiert (Ausnahmen siehe Typen)
- Inhalte von dynamischen Arrays werden NICHT initialisiert (Ausnahmen siehe Typen)
- Inhalt statischer Arrays (einzelne Felder siehe Typen und Orte)

yss14 29. Mai 2012 20:59

AW: Schrott im Array
 
OK, ich wunder mich halt nur, warum in 90% der Fälle der richtige Werte (eine einstelle Integer-Zahl) und dann plötzlich so nen Müll an der Stelle steht. Es ist ein Integer-Array, die Werte werden aber aus String-Arrays zugewiesen und über StrToInt(''+MeinArray[0][1]) zugewiesen...

Luckie 29. Mai 2012 21:02

AW: Schrott im Array
 
Und warum schreibst du nicht initialisierte Elemente von anderen Arrays in das Array?

yss14 29. Mai 2012 21:05

AW: Schrott im Array
 
Tsja, da hast du recht, da muss ich mich jetzt wohl mal ran machen und den gesamten Quellcode nach den Quellen des Mülls absuchen und die ganzen Arrays rausfischen und initialisieren. Ich wollte mal aus Interesse fragen, nicht das ich mich jetzt hinsetze und alles suche und danach teste und es dann umsonst war :D

himitsu 29. Mai 2012 21:05

AW: Schrott im Array
 
Und schalte mal probehalber die Bereichsprüfung an.
(in den Projektoptionen oder via Compilerschalter)

yss14 29. Mai 2012 21:22

AW: Schrott im Array
 
OK, ich habe jetzt alle Arrays, die ich verwende, initialisiert. Und die Bereichsprüfung angeschaltet. Der "Fehler" tritt immer noch auf, allerdings ist mir aufgefallen, dass es immer der gleiche Code ist: 4428132
Ich werden mir wohl morgen mal alles ausgeben lassen müssen und dann schauen, woher es kommt. Btw gibt es in Delphi 7 die Möglichkeit, sich während der Laufzeit den Inhalt eines Arrays anzuschauen, ohne ihn jedes mal auszugeben. Das würde die Arbeit sehr erleichtern...

omata 29. Mai 2012 21:28

AW: Schrott im Array
 
Zitat:

Zitat von himitsu (Beitrag 1168638)
Und schalte mal probehalber die Bereichsprüfung an.

Die sollte immer an sein, nicht nur probehalber.

Popov 29. Mai 2012 22:06

AW: Schrott im Array
 
Das ist jetzt etwas weit her geholt, aber das sieht mir nach einer Art Speicherüberlauf aus. Sollte eigentlich nicht passieren, ich kann mich aber erinnern sowas auch schon mal erlebt zu haben, auch wenn es schon lange her ist und ich mich an Einzelheiten nicht erinnern kann.

himitsu 29. Mai 2012 23:15

AW: Schrott im Array
 
Zitat:

Zitat von Popov (Beitrag 1168648)
Das ist jetzt etwas weit her geholt, aber das sieht mir nach einer Art Speicherüberlauf aus. Sollte eigentlich nicht passieren, ich kann mich aber erinnern sowas auch schon mal erlebt zu haben, auch wenn es schon lange her ist und ich mich an Einzelheiten nicht erinnern kann.

Darum auch der Rat mal die Bereichsprüfung (Prüfung der Indize, beim Zugriff auf Arrays) zu aktivieren.

Popov 29. Mai 2012 23:47

AW: Schrott im Array
 
Zitat:

Zitat von yss14 (Beitrag 1168641)
Btw gibt es in Delphi 7 die Möglichkeit, sich während der Laufzeit den Inhalt eines Arrays anzuschauen, ohne ihn jedes mal auszugeben.

Ja, ist möglich, es ist sogar möglich die Werte zu ändern.

Menü >> Ansicht > Debug-Fenster >

- Überwachte Ausdrücke (für alle Variablen, gesuchte Ausdrücke müssen hinzugefügt werden (Strg+A, oder rechte Maustaste))
- Lokale Variablen (alle lokalen Variablen werden angezeigt)

Wenn man bei Lokale Variablen die Variable mit rechten Maustaste auswählt, kann man den Objektinspektor wählen und einen Wert zuweisen oder ändern.

yss14 30. Mai 2012 08:11

AW: Schrott im Array
 
Zitat:

Zitat von Popov (Beitrag 1168661)
Zitat:

Zitat von yss14 (Beitrag 1168641)
Btw gibt es in Delphi 7 die Möglichkeit, sich während der Laufzeit den Inhalt eines Arrays anzuschauen, ohne ihn jedes mal auszugeben.

Ja, ist möglich, es ist sogar möglich die Werte zu ändern.

Menü >> Ansicht > Debug-Fenster >

- Überwachte Ausdrücke (für alle Variablen, gesuchte Ausdrücke müssen hinzugefügt werden (Strg+A, oder rechte Maustaste))
- Lokale Variablen (alle lokalen Variablen werden angezeigt)

Wenn man bei Lokale Variablen die Variable mit rechten Maustaste auswählt, kann man den Objektinspektor wählen und einen Wert zuweisen oder ändern.

Vielen Dank, werde ich nachher mal ausprobieren ;-)


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