![]() |
Bereichsprüfung geht nicht wirklich
Hi!
Ich nutze D7 Pro und habe das RangeChecking aktiviert. Trotzdem trat folgende Situation auf:
Delphi-Quellcode:
Im Fall i=0 ging das ganze gut. Länge von save war 1, an stelle 0 konnte ich also schreiben. Bei i=1 gings ja dann schief. Länge war 1 (3-1-1), er versuchte aber an Stelle 1 (3-2) zu schreiben.
while j < length(kante)-1+i do // j=i+2;
begin setlength(save, j-i-1); save[j-2]:=kante[j-1]; [... ] Es kam zu keiner Fehlermeldung, allerdings hat natürlich der weitere Programmablauf "Schaden" genommen, da ja in Save was falsches drinstand.
Delphi-Quellcode:
Wieso warnt mich die Bereichsprüfung da nicht? Geht das nur bei statischen arrays?
while j < length(kante)-1+i do
begin setlength(save, j-i-1); save[j-2-i]:=kante[j-1]; [... ] Wie kann man solche Fehler verhindern?` Ciao Frederic |
Re: Bereichsprüfung geht nicht wirklich
Ich weiß nicht, obs daran liegt, aber nach dem man die Option aktiviert/deaktiviert hat, sollte man das Projekt komplett neu erzeugen. Vorher zieht die Option nicht richtig. Aber eigentlich müsste diese auch dynamischen Arrays funktionieren ...
|
Re: Bereichsprüfung geht nicht wirklich
HI!
Ich habs jetzt auch mal neu erzeugen lassen, es hat sich aber nichts geändert. Er wirft halt später irgendwann ne Zugriffsverletzung raus, aber von ner "Warnung" keine Spur. Ciao Frederic |
Re: Bereichsprüfung geht nicht wirklich
MMh. Wird die vielleicht durch irgendeine eingebundene Unit/Datei mit der Compilerdirektive ({$R-} bzw. {$RANGECHECK OFF}) deaktiviert? Versuche doch mal vor dem entsprechenden Codeschnipsel die explizit zu aktivieren {$R+}. Dann sollte man ja merken, ob die wirklich Fehlerhaft ist, oder einfach nur deaktiviert wurde ...
P.S: Willst mal nicht deine Signatur aktualisieren? :mrgreen: |
Re: Bereichsprüfung geht nicht wirklich
Zitat:
|
Re: Bereichsprüfung geht nicht wirklich
Hi!
Nein, auch ein explizites {$R+} bewirkt keine Änderung! Ah, ein roter Kasten: @alzaimar: also bei dynamischen keine Chance? Gut zu wissen! Ciao Frederic P.S.: Wenn da nur noch steht "Wir sind Weltmeister geworden", dann weiß ja keiner, um was es geht. Vielleicht sollte ich nur mal hinter "Osaka/Japan" ein 'gewesen' schreiben! ;) |
Re: Bereichsprüfung geht nicht wirklich
Nach kurzem lesen deises Codes kommt mir der Verdacht, du hast einfach nur vergessen, dass der Indexbereich des Arrays bei 0 beginnt und NICHT bei 1. Kann das sein?
|
Re: Bereichsprüfung geht nicht wirklich
Zitat:
Es wird sehr wohl eine Bereichsüberprüfung mit eingebaut! Also: Sowohl bei statischen, als auch bei dynamischen Arrays wird bei eingeschaltetem RangeCheck eine Bereichsüberprüfung mit compiliert. Breakpoint auf die Stelle und dann Ctrl+Alt+C, um das CPU-Fenster zu öffnen. Selbst wenn man (wie ich) keine Ahnung von Assembler hat, sieht man doch ein jmp @BoundsErr, was jeder leicht als 'Bereichsüberprüfung' interpretieren kann. Der Code verschwindet, wenn man die Option wieder ausschaltet, UND PER BUILD den gesamten Code wieder compiliert. Es sollte zwar reichen, nur die unit neu zu kompilieren, aber sicher ist sicher. Wenn das bei Dir nicht klappt, dann hast du, wie bereits bemerkt vorher irgendwo im Code ein $R- klammere einfach den Codeteil in $R+ / $R- ein. |
Re: Bereichsprüfung geht nicht wirklich
Hi!
@tomsel: Ich hab doch oben geschrieben: Zitat:
Ciao Frederic |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:59 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