![]() |
Re: Wie ermittelt man die Grenzen mehrdimensionaler Arrays?
Eine Exception verschlucken, damit sie nicht geworfen wird.
|
Re: Wie ermittelt man die Grenzen mehrdimensionaler Arrays?
Das war mir klar. Aber imho ist das kein guter Programmierstil. Entweder ganz, oder gar nicht.
|
Re: Wie ermittelt man die Grenzen mehrdimensionaler Arrays?
Ja stimmt - deshalb ja auch >>brutal<< ;)
Mir fällt leider keine Funktion ein, mit der man die Protektion eines Bereiches im Speicher auslesen kann .. Ich hab mal den Try-Except Block weggetan und es mit VirtualProect - auch keine gute Lösung - gelöst :D
Delphi-Quellcode:
Edit:
function CntArrDimensions( const Arr: Pointer ): String;
var Protection: Cardinal; begin VirtualProtect( pCardinal( Cardinal(Arr^) - 4 ), 4, PAGE_READWRITE, Protection ); VirtualProtect( pCardinal( Cardinal(Arr^) - 4 ), 4, Protection, Protection ); if Protection = 0 then Exit; Result := '0..' + IntToStr( pCardinal( Cardinal(Arr^) - 4 )^ - 1 ) + ' ' + CntArrDimensions( Pointer( Cardinal(Arr^) ) ); end; @Daniel - Kuhle Signatur ;) |
Re: Wie ermittelt man die Grenzen mehrdimensionaler Arrays?
Delphi-Quellcode:
für mehr Ebenen mußt du über die RTTI gehn, denn anders ist keine sichere Auswertung möglich, da du nicht weißt was im Array für Daten enthalten und ob das überhaupt Arrays-Zeiger sind.
function CntArrDimensions(Arr: Pointer): String;
begin if Arr = nil then Result := 'leer' else Result := '0..' + IntToStr((PPInteger(Arr)^ - 4)^ - 1)); end; Mit viel Spaß könnte ich über ein einfaches Array of Integer deinen Code in eine Endlosschleife steuern :nerd: z.B.:
Delphi-Quellcode:
Var Arr: Array of Integer;
SetLength(Arr, 1); Arr[0] := Integer(Arr); |
Re: Wie ermittelt man die Grenzen mehrdimensionaler Arrays?
Zitat:
|
Re: Wie ermittelt man die Grenzen mehrdimensionaler Arrays?
Was mir noch aufgefallen ist, dein Code liefert immer nur die Größe des ersten Arrays einer Ebene und womöglich noch anderes, wenn es an der tiefsten Ebene vorbei ist.
Ein dynamisches Array kann aber für jedes Element/Unterarray einer Ebene 'ne andere Größe besitzen. |
Re: Wie ermittelt man die Grenzen mehrdimensionaler Arrays?
So ist es :) Jedoch ist sie leicht änderbar :P Und wenn man alle Unterarrays nach ihrer Größe abfragt, dann hat man m^n Abfragen und es wird ganz bestimmt nen Stack-Overflow geben :P
MfG |
Re: Wie ermittelt man die Grenzen mehrdimensionaler Arrays?
es gibt da zwar 'ne unbestimmte anzahl an Arrays, aber denoch nur soviele Funktionsaufrufe maximal gleichzeitig, wie es Ebenen gibt :angel2:
Schau dir (wenn es dir möglich ist) mal in der SystemUnit die Funktionen _Finalize, _FinalizeArray und _FinalizeRecord an :stupid: |
Re: Wie ermittelt man die Grenzen mehrdimensionaler Arrays?
Zitat:
Delphi-Quellcode:
var
a: array[[0..100, 10..10000] of Byte; i: Integer; begin i := High(a); |
Re: Wie ermittelt man die Grenzen mehrdimensionaler Arrays?
High(a) liefert dann 100, High(a[0]) 10000.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:29 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