AGB  ·  Datenschutz  ·  Impressum  







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

Dynamische Arrays ... kleines Problem!

Ein Thema von sonicfire · begonnen am 2. Aug 2006 · letzter Beitrag vom 4. Aug 2006
Antwort Antwort
Seite 1 von 7  1 23     Letzte »    
sonicfire

Registriert seit: 17. Jan 2006
Ort: Berlin
58 Beiträge
 
#1

Dynamische Arrays ... kleines Problem!

  Alt 2. Aug 2006, 03:21
Servus allerseits!

Ich habe schlicht und einfach nur die Frage...

Ich habe folgendes:
Test: Longint; So, nun möchte ich einen Array erstellen und dem die Größe
von "Test" geben ... :
SetLength(MeinArray, Trunc(Test)); Egal, welche Werte sich in "Test" befinden, ich habe
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? )
  Mit Zitat antworten Zitat
gmc616

Registriert seit: 25. Jun 2004
Ort: Jena
627 Beiträge
 
Delphi 10.3 Rio
 
#2

Re: Dynamische Arrays ... kleines Problem!

  Alt 2. Aug 2006, 03:43
Hmm ... meine Glaskugel sagt:
Delphi-Quellcode:
var
  Test : longint;
  MeinArray : array of word;
begin
  Test := 12345;
  setlength(MeinArray,trunc(Test));
funktioniert.

Welche Exception bekommst du denn?
Ein bischen mehr Code würde uns sicher auch weiter helfen.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Dynamische Arrays ... kleines Problem!

  Alt 2. Aug 2006, 04:04
Warum trunc? Test ist doch schon ein Integer.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.034 Beiträge
 
Delphi 12 Athens
 
#4

Re: Dynamische Arrays ... kleines Problem!

  Alt 2. Aug 2006, 15:20
Zitat:
Kann mir jemand sagen, warum dies so nicht funktioniert?

Delphi-Quellcode: markieren
SetLength(LoopBuffer, Trunc(Header.DataBytes));
?

"LoopBuffer" ist ein offenes Array vom Typ SmallInt, während "Header.DataBytes" vom Typ LongInt ist und mir Werte wie z.b. "248316" liefert.

Aber wieso ist das so nicht machbar?
Gibt´s Array-Grenzen im Bezug auf Größe? (Obwohl ich mir das nicht vorstellen kann)

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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Dynamische Arrays ... kleines Problem!

  Alt 2. Aug 2006, 15:32
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.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#6

Re: Dynamische Arrays ... kleines Problem!

  Alt 2. Aug 2006, 15:56
Zitat von 3_of_8:
Arrays sind nullbasiert.
Dynamische Arrays sind nullbasiert

Gruß Der Unwissende
  Mit Zitat antworten Zitat
sonicfire

Registriert seit: 17. Jan 2006
Ort: Berlin
58 Beiträge
 
#7

Re: Dynamische Arrays ... kleines Problem!

  Alt 2. Aug 2006, 17:53
Danke, an alle! Das Problem konnte ich mittlerweile beheben! Aber wie das so ist - prompt hat man ein neues :

Beispiel:
Delphi-Quellcode:
LoopBuffer: array of SmallInt;
SetLength(LoopBuffer, Header.DataBytes);
LoopBuffer := 0;
(...)
BlockWrite(F, LoopBuffer, Length(LoopBuffer)); ..bekomme ich grundsätzlich den EInOutError #1784 ... (das der zur Verfügung gestellte Puffer für diese Operation nicht gültig ist)


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?
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#8

Re: Dynamische Arrays ... kleines Problem!

  Alt 2. Aug 2006, 17:59
Zitat von sonicfire:
Beispiel:
Delphi-Quellcode:
LoopBuffer: array of SmallInt;
SetLength(LoopBuffer, Header.DataBytes);
LoopBuffer := 0;
(...)
Du weißt einem Array of SmallInt eine 0 zu? Was genau soll das bezwecken?

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:

BlockWrite(F, @LoopBuffer[0], Length(LoopBuffer)); Nebenbei bemerkt, Count sollte imho die Anzahl von Byte angeben, die geschrieben werden und hat nichts mit Records zu tun!

Gruß Der Unwissende
  Mit Zitat antworten Zitat
sonicfire

Registriert seit: 17. Jan 2006
Ort: Berlin
58 Beiträge
 
#9

Re: Dynamische Arrays ... kleines Problem!

  Alt 2. Aug 2006, 18:15
Danke!

Mit dem ":= 0" - ööhm...dachte, so.... zur Initialisierung, quasi?

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
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

Re: Dynamische Arrays ... kleines Problem!

  Alt 2. Aug 2006, 18:21
Das @ muss weg, das ist ein var-Parameter.
Zitat von Der_Unwissende:
BlockWrite(F, LoopBuffer[0], Length(LoopBuffer));
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 7  1 23     Letzte »    


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 12:37 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