![]() |
Unlösbares Problem?
Hallo,
ich programmiere zur Zeit mein eigenes Pokerspiel, es ist wahrscheinlich alles nicht sehr intelligent gelöst (mit Arrays und kein OOP) aber das reicht mir erstmal für den Anfang. Jetzt aber mein Problem: Ab und zu kommt eine EAccessViolation, also ein Zugriffsfehler auf den Speicher vor... und das Problem ist, dass es wirklich nur selten so ist!!! Hier die Code-Zeile, die mir Delphi als falsch makiert:
Delphi-Quellcode:
Naja, jetzt dachte ich mir, okay... ist ja logisch wenn ich in einem Array was von 0-5 geht durchgehe und dann auf [i+1] zugreifen will, das dann ein Fehler auftaucht.. aber die Frage ist jetzt, wieso taucht der Fehler nur manchmal auf?
for i:=0 to high(KartenArray) do begin
if (KartenArray[i].KartenZiffer = KartenArray[i+1].KartenZiffer) .... end; Ich hab mir eine Endlosschleife gebastelt in dem immer wieder simuliert wird, wie das Spiel neugestartet wird.. Gleichzeitig nen Zaehler mitlaufen lassen... Die unterschiedlichsten Werte sind dafür rausgekommen: 579,190,932,293,1258,119,6599,537,15353.... Das kann doch nicht sein? Ich teste es gerade mit der Schleife bis zu high -1 und es scheint gut zu laufen.. aber wieso taucht der Fehler oben nur so selten auf? |
AW: Unlösbares Problem?
Nja, wenn zufällig hinter dem Array etwas liegt, welches hier rein zufällig auch noch paßt, dann gibt es natürlich keinen Zugriffsfehler.
Delphi-Quellcode:
.
for i:=0 to high(KartenArray) - 1 do begin
Ich kann es allen immer wieder nur nochmal sagen: Man sollte mal in den Projektoptionen die Überlauf- und die Bereichprüfung anschalten. |
AW: Unlösbares Problem?
Ob ein Fehler kommt oder nicht hängt meines Erachtens nach davon ab, ob hinter dem Speicherblock noch ein Stück Speicherbereich kommt, das schon von deinem Programm alloziiert wurde. Jenachdem, wie die Speicherverwaltung gelöst ist, kann also nach dem array noch eine andere Datenstruktur oder überschüssiger Speicher liegen, dann sind Adresszeiger in diesen Raum gültig und die Fehlermeldung bleibt aus. Zu Fehlverhalten kann es trotzdem kommen, etwa wenn man ein dynamisches Array ausliest.
edit: himitsu war mal wieder schneller ;-) |
AW: Unlösbares Problem?
Okay danke für die schnelle Erklärung... allerdings habe ich in den Projektoptionen die Option angeschalten!
|
AW: Unlösbares Problem?
Dann dürfte man bei sowas nicht außerhalb der Arraygrenzen zugreifen können. :gruebel:
|
AW: Unlösbares Problem?
Und zu High() gehört Low()
|
AW: Unlösbares Problem?
Dynamische Arrays fangen eh immer nur bei 0 an. :angel:
|
AW: Unlösbares Problem?
Vielleicht kommt man aber auf deie Idee das einmal zu ändern.
|
AW: Unlösbares Problem?
Dann wäre Delphi aber nicht mehr abwärtkompatibel. :tongue:
(aus diesem Grund schleppen wir ja auch schon seit unzähligen Jahren diese 1 bei den Strings mit uns rum) |
AW: Unlösbares Problem?
@Lotus: Bitte gib deinem Thema, entsprechend den Forenregeln, einen aussagekräftigen Titel. Der jetzige Titel sagt rein gar nichts über dein Problem aus. :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:07 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