![]() |
Zufallsbuchstabe-Array Fehler
Hallo Delphi-PRAXIS,
Ich generiere mit folgendem Code Zufallsbuchstaben, die eigentlich mein Array(zweidimensional) füllen sollen, die ich danach ausgeben kann.
Delphi-Quellcode:
Ich bekomme jedesmal eine Zugriffsverletzung... kann mir jemand helfen den Fehler zu finden?
spalten : array [1..300] of integer;
zeilen : array [1..300] of integer; ... for i := 0 to AnzahlSpalten do for n := 0 to AnzahlZeilen do begin Spaltenzaehler := i; Zeilenzaehler := n; randomize; RandomZeichen := random(26) + 65; //*******************************************************************************************\\ buchstabe[i,n].Zeichen := char(RandomZeichen); // Hier ist ein Fehler! //*******************************************************************************************\\ Schreibflaeche.Canvas.TextOut(spalten[Spaltenzaehler],zeilen[Zeilenzaehler],buchstabe[i,n].zeichen); end; FG Dunkelbunt |
AW: Zufallsbuchstabe-Array Fehler
Deine Arrays starten bei Index 1, deine Schleifen aber bei 0!
Edit: Die Deklaration des Buchstaben-Arrays fehlt allerdings in deinem Code-Ausschnitt. Geht dieses Array auch bei 1 an? Und für was sollen denn die beiden Arrays "spalten" und "zeilen" eigentlich gut sein? |
AW: Zufallsbuchstabe-Array Fehler
Du fängst bei der Schleife bei 0 an zu zählen, dein Array beginnt aber erst bei 1
[edit] zu langsam [/edit] |
AW: Zufallsbuchstabe-Array Fehler
Delphi-Quellcode:
Das mit der 1 statt Null bewirkt jetzt, dass die buchstaben eigentlich perfekt passen, trotzdem kommt bei der Zeile:
type
TBuchstabe = record ... end; var buchstabe : array of array of TBuchstabe;
Code:
eine Zugriffsverletzung im Modul ....
buchstabe[i,n].Zeichen := char(RandomZeichen);
|
AW: Zufallsbuchstabe-Array Fehler
Delphi-Quellcode:
Setzt du denn auch irgendwo die Größe des Arrays per SetLength?
buchstabe : array of array of TBuchstabe;
|
AW: Zufallsbuchstabe-Array Fehler
Ja, das funktioniert alles.
Code:
Das Problem liegt laut Compiler bei der besagten Stelle.
SetLength(buchstabe,Anzahlzeilen,Anzahlspalten);
|
AW: Zufallsbuchstabe-Array Fehler
Achtung: Wenn du die Größe eines dynamischen Arrays per SetLength auf einen Wert x setzt, dann ist der höchste Index high(array) = x-1 !
Das bedeutet, dass die Zugriffsverletzung wahrscheinlich "am Ende der Schleife" auftritt, weil du zu weit iterierst. Probier folgendes:
Delphi-Quellcode:
Also bei 0 anfangen und bis Anzahl-1 durchgehen. Auch darauf achten, dass deine anderen Arrays groß genug sind. Vor allem sollten sie dann auch bei 0 anfangen ;-)
for i := 0 to AnzahlSpalten -1 do
for n := 0 to AnzahlZeilen -1 do |
AW: Zufallsbuchstabe-Array Fehler
Das ist komisch, sowas hatte ich mir schon gedacht gehabt und ausprobiert und jetzt fangen alle Arrays bei 0 an, ich lasse die Schleife bis ...-1 laufen und bekomme wieterhin eine Zugriffsverletzung...
Ich hoffe es weiß nochjemand weitere Ratschläge... EDIT: Falls es Hilft, es kommt direkt am Start, bevor man etwas sieht eine Zugriffsverletzung und am Ende... |
AW: Zufallsbuchstabe-Array Fehler
Ich meine, du hast Zeilen und Spalten vertauscht. Probier doch mal aus, was passiert, wenn du die Anzahl der Spalten gleich der Anzahl der Zeilen setzt, dann sollte es eigentlich funktionieren.
Schau dir das mal genauer an:
Delphi-Quellcode:
SetLength(buchstabe,Anzahlzeilen,Anzahlspalten);
In erster Dimension hast du "AnzahlZeilen" an Elementen, in zweiter Dimension "AnzahlSpalten". In deiner Schleife machst du folgendes:
Delphi-Quellcode:
i iteriert über die erste Dimension. Du gehst bis "AnzahlSpalten" -1, hast aber bloß "AnzahlZeilen" Elemente. Das gleiche gilt für n. Wenn "AnzahlZeilen" <> "AnzahlSpalten" dann kracht es irgendwann unweigerlich...
for i := 0 to AnzahlSpalten -1 do
for n := 0 to AnzahlZeilen -1 do begin //... buchstabe[i,n].Zeichen := Char(RandomZeichen); // i ist erste Dimension, n zweite !!!! end; |
AW: Zufallsbuchstabe-Array Fehler
JAWOLL!:bounce1: Das funktioniert supi!
:dp: Es ist nur etwas komisch, dass nicht jedes Zeichen "radom" ist sondern viele zeichen untereinander(eigentlich alle) gleich sind. Das ist jetzt aber nicht DAS Problem.. vielleicht ist es unvermeindlich, ich miene außer Randomize gibt es ja nichts mir bekanntes... DANKE erstmal! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz