AGB  ·  Datenschutz  ·  Impressum  







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

Bereichsprüfung geht nicht wirklich

Ein Thema von fkerber · begonnen am 6. Jan 2006 · letzter Beitrag vom 6. Jan 2006
Antwort Antwort
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#1

Bereichsprüfung geht nicht wirklich

  Alt 6. Jan 2006, 10:45
Hi!

Ich nutze D7 Pro und habe das RangeChecking aktiviert. Trotzdem trat folgende Situation auf:

Delphi-Quellcode:
   while j < length(kante)-1+i do // j=i+2;
    begin
     setlength(save, j-i-1);
     save[j-2]:=kante[j-1];
[... ]
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.
Es kam zu keiner Fehlermeldung, allerdings hat natürlich der weitere Programmablauf "Schaden" genommen, da ja in Save was falsches drinstand.

Delphi-Quellcode:
   while j < length(kante)-1+i do
    begin
     setlength(save, j-i-1);
     save[j-2-i]:=kante[j-1];
[... ]
Wieso warnt mich die Bereichsprüfung da nicht? Geht das nur bei statischen arrays?
Wie kann man solche Fehler verhindern?`


Ciao Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#2

Re: Bereichsprüfung geht nicht wirklich

  Alt 6. Jan 2006, 10:50
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 ...
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#3

Re: Bereichsprüfung geht nicht wirklich

  Alt 6. Jan 2006, 10:55
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
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#4

Re: Bereichsprüfung geht nicht wirklich

  Alt 6. Jan 2006, 11:01
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?
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Bereichsprüfung geht nicht wirklich

  Alt 6. Jan 2006, 11:05
Zitat von jim_raynor:
Vorher zieht die Option nicht richtig. Aber eigentlich müsste diese auch dynamischen Arrays funktionieren ...
Nein. Der Compiler fügt bei aktivierter Bereichsüberprüfung nur bei statischen Arrays Prüfcode mit ein.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#6

Re: Bereichsprüfung geht nicht wirklich

  Alt 6. Jan 2006, 11:06
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!
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von tomsel
tomsel

Registriert seit: 8. Dez 2005
Ort: am Chiemsee
304 Beiträge
 
Delphi 7 Professional
 
#7

Re: Bereichsprüfung geht nicht wirklich

  Alt 6. Jan 2006, 11:35
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?
Ein Experte ist ein Mann, der hinterher genau sagen kann, warum seine Prognose nicht gestimmt hat. (Winston Churchill)
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Bereichsprüfung geht nicht wirklich

  Alt 6. Jan 2006, 12:24
Zitat von fkerber:
@alzaimar: also bei dynamischen keine Chance? Gut zu wissen!
Hatte den gleichen Fehler, wie Alle Anderen: Mein Delphi hatte die Änderungen nicht übernommen!

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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#9

Re: Bereichsprüfung geht nicht wirklich

  Alt 6. Jan 2006, 12:49
Hi!

@tomsel:
Ich hab doch oben geschrieben:


Zitat von fkerber:
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.

Ciao Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:55 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