![]() |
Delphi XE - Array Problem
Moin, ich habe eben begonnen ein bisschen mit Delphi XE rumzuspielen und wollte mir einen kleinen Kalendar basteln. Und schon gibt es Probleme :D
Warum wirft folgender Code keine Exception: (PS: Bei Delphi 7 krieg ich wie gehabt die Fehlermeldung "Ungültige Zeigerposition")
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Monate: array of String; i: Integer; begin setLength(Monate,11); Monate[0]:='Januar'; Monate[1]:='Februar'; Monate[2]:='März'; Monate[3]:='April'; Monate[4]:='Mai'; Monate[5]:='Juni'; Monate[6]:='Juli'; Monate[7]:='August'; Monate[8]:='September'; Monate[9]:='Oktober'; Monate[10]:='November'; Monate[11]:='Dezember'; for i:=Low(Monate) to High(Monate) do ComboBox1.Items.Add(Monate[i]); end; |
AW: Delphi XE - Array Problem
Ist den die Bereichsüberprüfung aktiviert?
|
AW: Delphi XE - Array Problem
Hmm muss man die Extra aktivieren ? Melde mich gleich zurück :D
Edit: Hmm so klappt es jetzt:
Delphi-Quellcode:
Ich musste aber noch nie {$R+} manuell hinzufügen. Komisch !
implementation
{$R *.dfm} {$R+} ... Edit2: Hmm hab grad festgestellt das die Bereichsüberpüfung Stadardmäßig false ist. Mal sehen ob ich die Global auf true setzen kann. (Keine Lust das bei jedem Projekt einzustellen) |
AW: Delphi XE - Array Problem
Projektoptionen -> Compiler -> Checkbox setzen?
|
AW: Delphi XE - Array Problem
Schau mal in den Projektoptionen links unten. Da findest eine Checkbox, sodass das nicht jedes mal vornehmen musst.
|
AW: Delphi XE - Array Problem
Ja, habs auf anhieb nich gefunden. Ok jetzt ist es gesetzt...
War das bei euch auch so? Ich hab das frisch installiert, ist das default nicht auf True gesetzt ? |
AW: Delphi XE - Array Problem
Bei mir -- aktuell Delphi XE -- ists auch auf False.
|
AW: Delphi XE - Array Problem
Hmm du hast wohl auch keinen Grund das auf True zu setzen 8-)
Zum Debuggen ist es für mich eigentlich zwingend notwendig. :!: |
AW: Delphi XE - Array Problem
Ich arbeite selten mit dynamischen Arrays und bin mir bei sowas meist recht sicher, ergo habe ich es bisher nie wirklich vermisst :stupid:
|
AW: Delphi XE - Array Problem
Zitat:
|
AW: Delphi XE - Array Problem
Delphi-Quellcode:
<<< Wie viele Monate gibts aber deiner Meinung dann?! :mrgreen:
setLength(Monate,11);
|
AW: Delphi XE - Array Problem
Naja so bin ich nich auf das Problem gestoßen. Den Code hab ich auch nur als Beispiel benutzt :)
Ich wollte ursprünglich wissen was ich für eine Exception kriege wenn die Länge des Arrays < des Array Item Count ist. |
AW: Delphi XE - Array Problem
Hast dich nochmal geschickt raus geredet :mrgreen: :stupid:
|
AW: Delphi XE - Array Problem
Ich geb's auf :)
Alle weiteren Comments sind überflüssig ! :-D |
AW: Delphi XE - Array Problem
Zitat:
Ist Aufgrund der Optiomierung aus, da viele vergessen mal in die Projektoptionen zu schauen. Seit es mehere Profile gibt, hätte man dieses aktivieren können, aber Emba hört ja nicht auf mich und mein QC-Eintrag diesbezüglich ging unter. |
AW: Delphi XE - Array Problem
Hmm du hast Recht, bei Delphi 7 ist es auch deaktiviert jedoch krieg ich da die Exception. Das widerspricht sich irgendwie :)
|
AW: Delphi XE - Array Problem
Man kann dieses zusätzlich auch nochmal über einen Compiler-Schalter innerhalb jeder Unit (nur für den nachfolgenden Code dieser Unit) umschalten.
Also könntestes/müßtest du auch nochmal in dieser Unit nachsehn. "Ungültige Zeigeroperation" klingt allerdings nicht nach Index-Fehler, bzw. "Fehler bei Bereichsprüfung.". Dein Fehler ist eher eine "Zugriffsverletzung", weil du "glücklicher Weise" auf einen ungültigen/nichtexistierenden/gesperrten Speicherbereich zugreifst. |
AW: Delphi XE - Array Problem
Zitat:
|
AW: Delphi XE - Array Problem
Zitat:
Und es kann doch gut sein, das Delphi 7 und Delphi XE das dynamische Array unterschiedlich behandelt oder einen anderen Speichermanager benutzen... |
AW: Delphi XE - Array Problem
In XE und in Delphi 7 gibt es auch noch zwei grundsätzlich unterschiedliche Speichermanager.
(irgendwann wurde ja mal FastMM integriert) Ansonsten ist es eben Glück. Wenn man außerhalb der Arraygrenzen zugreift kann sonstwas passieren und was passiert, das liegt daran, was "zufällig" an dieser Speicherstelle rumliegt (oder nicht). |
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