AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Unlösbares Problem?

Ein Thema von Lotus · begonnen am 5. Sep 2010 · letzter Beitrag vom 6. Sep 2010
Antwort Antwort
Seite 1 von 2  1 2      
Lotus

Registriert seit: 26. Feb 2007
85 Beiträge
 
Delphi 7 Personal
 
#1

Unlösbares Problem?

  Alt 5. Sep 2010, 15:05
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:
for i:=0 to high(KartenArray) do begin
if (KartenArray[i].KartenZiffer = KartenArray[i+1].KartenZiffer)
....
end;
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?

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?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#2

AW: Unlösbares Problem?

  Alt 5. Sep 2010, 15:25
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.

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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
hboy

Registriert seit: 16. Jan 2004
364 Beiträge
 
#3

AW: Unlösbares Problem?

  Alt 5. Sep 2010, 15:33
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
Power is nothing without TControl
  Mit Zitat antworten Zitat
Lotus

Registriert seit: 26. Feb 2007
85 Beiträge
 
Delphi 7 Personal
 
#4

AW: Unlösbares Problem?

  Alt 5. Sep 2010, 16:40
Okay danke für die schnelle Erklärung... allerdings habe ich in den Projektoptionen die Option angeschalten!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#5

AW: Unlösbares Problem?

  Alt 5. Sep 2010, 17:07
Dann dürfte man bei sowas nicht außerhalb der Arraygrenzen zugreifen können.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Unlösbares Problem?

  Alt 5. Sep 2010, 17:16
Und zu High() gehört Low()
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#7

AW: Unlösbares Problem?

  Alt 5. Sep 2010, 18:12
Dynamische Arrays fangen eh immer nur bei 0 an.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 5. Sep 2010 um 18:27 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Unlösbares Problem?

  Alt 5. Sep 2010, 18:15
Vielleicht kommt man aber auf deie Idee das einmal zu ändern.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#9

AW: Unlösbares Problem?

  Alt 5. Sep 2010, 18:28
Dann wäre Delphi aber nicht mehr abwärtkompatibel.
(aus diesem Grund schleppen wir ja auch schon seit unzähligen Jahren diese 1 bei den Strings mit uns rum)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#10

AW: Unlösbares Problem?

  Alt 5. Sep 2010, 18:45
@Lotus: Bitte gib deinem Thema, entsprechend den Forenregeln, einen aussagekräftigen Titel. Der jetzige Titel sagt rein gar nichts über dein Problem aus.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:27 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