![]() |
Dynamische Arrays ... kleines Problem!
Servus allerseits! :)
Ich habe schlicht und einfach nur die Frage... Ich habe folgendes:
Delphi-Quellcode:
So, nun möchte ich einen Array erstellen und dem die Größe
Test: Longint;
von "Test" geben ... :
Delphi-Quellcode:
Egal, welche Werte sich in "Test" befinden, ich habe
SetLength(MeinArray, Trunc(Test));
das Gefühl das dies so nicht geht - bekomme immer exceptions. :( Kann mir jemand einen Tipp geben? (PS: Test MUSS LongInt sein ... oder muss ich das konvertieren? Irgendwie? :)) |
Re: Dynamische Arrays ... kleines Problem!
Hmm ... meine Glaskugel sagt:
Delphi-Quellcode:
funktioniert.
var
Test : longint; MeinArray : array of word; begin Test := 12345; setlength(MeinArray,trunc(Test)); Welche Exception bekommst du denn? Ein bischen mehr Code würde uns sicher auch weiter helfen. |
Re: Dynamische Arrays ... kleines Problem!
Warum trunc? Test ist doch schon ein Integer.
|
Re: Dynamische Arrays ... kleines Problem!
Zitat:
248316*SizeOf(SmallInt) = 485 KB sollte also kein Problem darstellen Die Grenzen für dynamische Arrays liegen bei High(Integer) div SizeOf(FeldGröße) und natürlich dem zur Verfügung stehenden, zusammenhängenden, virtuellen Speicher. also bei dir $7FFFFFFF div 2 = maximal 1.073.741.823 Und ohne weiteren Code deinerseit kann dir keiner helfen ... das mit dem TRUNC wurde schon gesagt und sonst ist hier kein Fehler zu finden. |
Re: Dynamische Arrays ... kleines Problem!
Arrays sind nullbasiert.
Das erste Element steht nicht in Index 1, sondern in index 0. Das letzte Element steht also auch nicht in length(array), sondern in length(array)-1 bzw. high(array). Vielleicht ist das das Problem. |
Re: Dynamische Arrays ... kleines Problem!
Zitat:
Gruß Der Unwissende |
Re: Dynamische Arrays ... kleines Problem!
Danke, an alle! Das Problem konnte ich mittlerweile beheben! Aber wie das so ist - prompt hat man ein neues :wink: :
Beispiel:
Delphi-Quellcode:
(...)
LoopBuffer: array of SmallInt;
SetLength(LoopBuffer, Header.DataBytes); LoopBuffer := 0;
Delphi-Quellcode:
..bekomme ich grundsätzlich den EInOutError #1784 ... (das der zur Verfügung gestellte Puffer für diese Operation nicht gültig ist)
BlockWrite(F, LoopBuffer, Length(LoopBuffer));
:shock: Und da Frage ich mich nun, warum?? BlockWrite benötigt für "Count" (anzahl der Records, quasi) einen Wert vom Typ Integer. So. Mein "Length(LoopBuffer)" GIBT einen Integerwert zurück! (Hab ich bereits via Bildschirmausgabe getestet). Wo zum Henker ist also das verdammte Problem hier? :wall: :gruebel: :( |
Re: Dynamische Arrays ... kleines Problem!
Zitat:
Die Größe ist soweit auch nicht der Fehler. Versuch aber mal die Adresse des ersten Elements zu verwenden statt den Zeiger auf das Array:
Delphi-Quellcode:
Nebenbei bemerkt, Count sollte imho die Anzahl von Byte angeben, die geschrieben werden und hat nichts mit Records zu tun!
BlockWrite(F, @LoopBuffer[0], Length(LoopBuffer));
Gruß Der Unwissende |
Re: Dynamische Arrays ... kleines Problem!
Danke! :)
Mit dem ":= 0" - ööhm...dachte, so.... zur Initialisierung, quasi? :oops: Hmm habs mit dem Pointer getestet, Allerdings kann ich es nicht kompilieren, bekomme dann immer die Fehlermeldung das er noch eine Variable benötigt... :? Nun dachte ich wenn ich direkt LoopBuffer[0] angebe, würde er quasi bei Eintrag 0 starten... aber irgendwie.... ist dann nichts mehr in meinem WAV-File :mrgreen: :gruebel: |
Re: Dynamische Arrays ... kleines Problem!
Das @ muss weg, das ist ein var-Parameter.
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:15 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