Einzelnen Beitrag anzeigen

Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#44

Re: Dynamische Arrays ... kleines Problem!

  Alt 3. Aug 2006, 21:22
Hmm... eventuell kommst du über den rand hinaus mit dem readbuffer... versuchs mal mit read ohne buffer, evtl. hilft das was.

ich muss mal überlegen... angenommen, wir haben einen header, der 5 bytes lang ist. dann wird als start 6 übergeben, und position = 6.

Angenommen Größe 10, wird ...aaaahhh....

weiter im text. größe der datei 10, dann haben wir noch 4 bytes zu lesen. also setzen wir die größe des arrays - natürlcih - auf 4 bytes geteilt durch (!) größe unseres datentyps. das ham wir (hab ich) hier schon mal falsch gemacht. also, angenommen

Delphi-Quellcode:
Procedure TForm1.LoadTheWave(FileName: String; out Value: TSmallIntArray; Start: Integer = 0);
begin
  with TFilestream.Create(Filename, fmOpenRead) do
    try
      Position := Start;
      setlength(Value, (Size-Position) div sizeof(SmallInt));
      ReadBuffer(Value,length(Value));
    finally
      Free;
    end;
end;

wenn ein smallint 2 byte groß ist (hypothetisch), ist value jetzt 4 / 2 = 2 Smallints groß. Also haben wir vier bytes zu lesen und müssen im readbuffer die Länge wieder auf 4 bringen - also wieder *sizeof(SmallInt):

Delphi-Quellcode:
Procedure TForm1.LoadTheWave(FileName: String; out Value: TSmallIntArray; Start: Integer = 0);
begin
  with TFilestream.Create(Filename, fmOpenRead) do
    try
      Position := Start;
      setlength(Value, (Size-Position) div sizeof(SmallInt));
      ReadBuffer(Value,length(Value) * sizeof(SmallInt));
    finally
      Free;
    end;
end;
Das hat uns aber noch nicht weitergebracht als bis dahin, dass das Ergebnis nicht mehr viel zu groß ist - sollte also die Fehler nicht nicht beheben.

EDIT: Wo genau tritt denn der runtime-error auf? Du kannst im Quelltext breakpoints setzen, indem du im editor links neben die zeile klickst (im grauen), wenn der programmcode da vorbeikommt, hält der debugger die ausführung an. damit kannst du genau sehen, wanns knallt.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat