![]() |
Ungültige Zeigeroperation
Hi,
ich habe eine 2D-Karte mit X*Y Feldern auf der Karte. Ich benutze hierbei ein dymnamisches Array, damit der User die Anzahl der Felder der X- oder Y-Achse wechseln kann. Ich habe das wiefolgt gemacht:
Delphi-Quellcode:
Wenn ich nun die Anzahl der Felder verändere und es statt 5x5 nur noch 4x4 Felder gibt, motzt Delphi rum und zeigt mir eine ungültige Zeigeroperation an. Wenn ich die Anzahl auf 7x7 erhöhe gibt es keine Probleme. Ich rufe SetLength immer dann auf, wenn sich die Größe der X- oder Y-Achse verändert. Wo liegt das Problem?
type
TFeldDaten = record FeldArt : Integer; end; ... type TFelder = record FeldX, FeldY : Integer; Felder : Array of TFeldDaten; end; ... Isokarte : TFelder; ... SetLength(Isokarte.Felder, MaxX*MaxY); |
Re: Ungültige Zeigeroperation
1. Editiere mal deinen Beitrag und ändere deine [ code ][ /code ]-tags in [ delphi ][ /delphi ]-tags (ohen die Leerzeichen natürlich)
2. Zitat:
Dann siehst du, ob es am setlength-Befehl liegt (ich kann mir das dann nämlcih nciht erklären...). Ansonsten sollstest du darüber nachdenken, ob ein 2D-Array bei einer 2D Karte nicht angenehmer ist. den musst du so deklarieren:
Delphi-Quellcode:
also einfach nur ein Array of Array...
type
TFelder = record FeldX, FeldY : Integer; Felder : Array of Array of TFeldDaten; end; |
Re: Ungültige Zeigeroperation
Mhmm, als dann müsste ja
Delphi-Quellcode:
funktionieren oder?
SetLength(Isokarte.Felder, MaxX*MaxY+1);
Leider treten immer unterschiedliche "Ungültige Zeigeroperationen" auf. Immer wird eine andere Zeile im Quellcode markiert. Irgendwas stimmt da nicht. Ich arbeite u.a. mit der Komponente DelphiX bzw. mit der DXDraw Komponente aus dem Package. Vielleicht hilft das manchem als Info. Wie "bedient" man denn ein 2D-Array? Alleine das Erstellen reicht mir leider nicht an Informationen :-/ |
Re: Ungültige Zeigeroperation
dann ist dein Problem wirklich schwer nachzuvollziehen...
Einen zweidemensionalen Array bedients du eigentlich so: meinarray[x][y] Allerdings bietet dir Delphi auch eine Kurzschreibweise: meinarray[x,y] bei setlength nimmst du einfach noch einen parameter mehr: setlength(meinarray,x,y); Du solltest dir in der Hilfe mal das Kapitel Multidimensional dynamic arrays durchlesen, da ist alles beschriben... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:03 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