AGB  ·  Datenschutz  ·  Impressum  







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

EOutOfMemory

Ein Thema von Die Muhkuh · begonnen am 13. Jan 2005 · letzter Beitrag vom 13. Jan 2005
Antwort Antwort
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#1

EOutOfMemory

  Alt 13. Jan 2005, 18:46
Hi,

ich bekomme bei diesem Code eine EOutOfMemory-Exception:

Delphi-Quellcode:
 
function TfDoc.ReadStringFromStream(F: TStream): string;
var
  aStrLen: Integer;
begin
  F.ReadBuffer(aStrLen, SizeOf(Integer));
  SetLength(Result, aStrLen); //<<< Da kommt ein Fehler
  if aStrLen > 0 then
    F.ReadBuffer(Pointer(Result)^, aStrLen);
end;

{Procedure blablabla}

     ReadStringFromStream(aStream);
      FName := ReadStringFromStream(aStream);
      if FName <> ExtractFileName(FileName) then
      begin
        MessageBox(Handle,
          'Der Dateiname wurde seit dem letzten Speichern verändert.',
          'Hinweis', MB_OK);

        Modified := true;
        IsMod := true;
      end
      else
        IsMod := false;
      FAuthor := ReadStringFromStream(aStream);
      FDate := ReadStringFromStream(aStream);
      FComment := ReadStringFromStream(aStream);
      Temp := ReadStringFromStream(aStream);
      aSStream := TStringStream.Create(Temp);
      case FEditor of
        etRichText: RichEdit.Lines.LoadFromStream(aSStream);
        etCode: Code.Lines.LoadFromStream(aSStream);
      end;

      FIsDC := true;
Weis jemand warum?
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#2

Re: EOutOfMemory

  Alt 13. Jan 2005, 18:48
Schonmal im Debugger überprüft, wie groß aStrLen nach dem Einlesen ist?
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#3

Re: EOutOfMemory

  Alt 13. Jan 2005, 18:53
Hi,

ich glaube es lag an dem Dokument das ich geladen habe. Ich hab jetzt mal ein anderes geladen, dort gings auf Anhieb.

In welchem Fall tritt diese Fehlermeldung auf?
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: EOutOfMemory

  Alt 13. Jan 2005, 18:57
Wenn in aStrLen eine Zahl > High(Integer) steht. Für gewöhnlich wären das dann (als Integer gesehen) negative Werte, die dann umklappen dürften.
Ein Prozess darf imho nicht mehr als 2GB allozieren.

\\edit: Probier mal "SetLength(Array, -1);"
Mich würde mal interessieren was dabei raus kommt. (Hab grad kein Delphi zur Hand)
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#5

Re: EOutOfMemory

  Alt 13. Jan 2005, 19:13
Zitat von Spider:
In welchem Fall tritt diese Fehlermeldung auf?
Was ist denn an "Out of Memory" so schwer zu verstehen? Wenn du mehr Speicher allokieren willst als dir zur Verfügung steht (inklusive Paging).

Zitat von dizzy:
\\edit: Probier mal "SetLength(Array, -1);"
Mich würde mal interessieren was dabei raus kommt. (Hab grad kein Delphi zur Hand)
ERangeError
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: EOutOfMemory

  Alt 13. Jan 2005, 20:06
Zitat von tommie-lie:
ERangeError
Na gut

Aber auch wenn man's ohne Bereichsprüfung kompiliert!? Und evtl. dann auch mal mit einer Variablen:
Delphi-Quellcode:
var
  i: Integer;
begin
  i := -1;
  SetLength(Array, i);
end;
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#7

Re: EOutOfMemory

  Alt 13. Jan 2005, 20:13
Zitat von dizzy:
Aber auch wenn man's ohne Bereichsprüfung kompiliert!?
Ich habe es ohne Range-Checking kompiliert
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:13 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