AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Fehlermeldung "Zu wenig Arbeitsspeicher"
Thema durchsuchen
Ansicht
Themen-Optionen

Fehlermeldung "Zu wenig Arbeitsspeicher"

Ein Thema von DerAndereMicha · begonnen am 6. Aug 2008 · letzter Beitrag vom 7. Aug 2008
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Benutzerbild von DerAndereMicha
DerAndereMicha

Registriert seit: 1. Jul 2004
Ort: Berlin
208 Beiträge
 
Delphi 2007 Enterprise
 
#1

Fehlermeldung "Zu wenig Arbeitsspeicher"

  Alt 6. Aug 2008, 12:56
Hallo Zusammen,

in einer Funktion von mir, die dazu dient aus einer SQL-Anweisung (als Stringliste) alle Kommentare zu entfernen, tritt sporadisch der Fehler "Zu wenig Arbeitsspeicher" auf. Leider kann ich nicht nachvollziehen, wo und warum das geschieht. Evtl. hat einer von Euch ja mehr Überblick und sieht auf den 1.Blick, unter welchen Umständen das passieren könnte bzw. ob ich ansich einen schweren Fehler begehe (evl. die Übergabe der Stringliste?).

Delphi-Quellcode:
function DeleteComments(TempList:TStringList):TStringList;
var beg,en,i : integer;
begin
    for i:=0 to TempList.Count-1 do
       if Trim(Copy(TempList[i],1,2))='--then
         TempList[i]:='/*'+Copy(TRIM(TempList[i]),3,Length(TempList[i]))+'*/';

    while pos('/*',TempList.Text) <> 0 do
    begin
      beg:=pos('/*',TempList.Text);
      en:=pos('*/',TempList.Text);
      if en=0 then en:=Length(TempList.Text);
      TempList.Text:=copy(TempList.text,1,beg-1)+
                     copy(TempList.Text,en+2,Length(TempList.Text));
    end;
    Result:=TempList;
end;
Gruß
Micha
Der Weg ist das Ziel...
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.606 Beiträge
 
#2

Re: Fehlermeldung "Zu wenig Arbeitsspeicher"

  Alt 6. Aug 2008, 13:01
Ich glaube nicht, dass es an der Übergabe liegt.
Aber warum gibst Du die Instanz von Templist zurück?
Wenn Du doch eh auf der Liste Veränderungen vornimmst, dann brauchst Du sie nicht zurückzugeben.

Delphi-Quellcode:
procedure Machwas;
var
 myListe: TStringList;
begin
  myListe := TStringList.Create();
  try
    // hier noch die liste füllen...


    // der Aufruf
    myListe := DeleteComments(myListe);

    // ist vollkommen identisch mit:
    DeleteComments(myListe);

  finally
    if Assigned(myListe) then
      FreeAndNil(myListe);
  end;
end;
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von DerAndereMicha
DerAndereMicha

Registriert seit: 1. Jul 2004
Ort: Berlin
208 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Fehlermeldung "Zu wenig Arbeitsspeicher"

  Alt 6. Aug 2008, 13:09
Ok, schon geändert.

Macht es eigentlich einen Unterschied ob man:

procedure DeleteComments(TempList:TStringList); oder

procedure DeleteComments(var TempList:TStringList);
deklariert.

Gruß
Micha
Der Weg ist das Ziel...
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Fehlermeldung "Zu wenig Arbeitsspeicher"

  Alt 6. Aug 2008, 13:16
Ja, denn bei der Übergabe als var kannst Du theoretisch sogar die Referenz ändern, d.h. wenn Du ListBox.Items übergibst, könntest Du auf ComboBox.Items referenzieren. Daher habe ich persönlich mir angewöhnt, Objektinstanzen immer als const-Parameter zu übergeben.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von DerAndereMicha
DerAndereMicha

Registriert seit: 1. Jul 2004
Ort: Berlin
208 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Fehlermeldung "Zu wenig Arbeitsspeicher"

  Alt 6. Aug 2008, 13:23
Alles klar und vielen Dank.

Aber woher könnte denn nun die Fehlermeldung kommen?
Der Weg ist das Ziel...
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Fehlermeldung "Zu wenig Arbeitsspeicher"

  Alt 6. Aug 2008, 13:27
Übergibst Du jetzt als const-Parameter?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.606 Beiträge
 
#7

Re: Fehlermeldung "Zu wenig Arbeitsspeicher"

  Alt 6. Aug 2008, 13:33
Für mich gerade logische Erklärung:
Du benutzt ziemlich intensiv 'copy'. Das erzeugt eine String-Variable. Da Du das Ergebnis sofort verwendest und nirgends 'manuell' zwischenspeicherst, muss Delphi die Variable ja irgendwo hinpacken. Jedes einzelne Copy braucht also Speicher, der solange belegt wird, bis die Funktion beendet ist. (Kann auch sein, dass ich mich hier irre. Ich kenne die interna dafür nicht gut genug).

Möglicherweise hilft es, mit temporären Variablen zu arbeiten, und zuerst die Rückgabe von Copy dort abzulegen und dann erst dann zu vergleichen, als das in einem Schritt zu machen. Somit hat der Wert der aus Copy rauskommt einen genau definierten Platz im Speicher und überschreibt immer den vorherigen, anstelle neuen Platz zu benötigen (wie gesagt ohne Gewähr für die Richtigkeit meiner Annahme).
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Fehlermeldung "Zu wenig Arbeitsspeicher"

  Alt 6. Aug 2008, 13:35
Klingt logisch.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.606 Beiträge
 
#9

Re: Fehlermeldung "Zu wenig Arbeitsspeicher"

  Alt 6. Aug 2008, 13:36
Zitat von DeddyH:
Klingt logisch.
Kann aber genausogut grottenverkehrt sein
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von DerAndereMicha
DerAndereMicha

Registriert seit: 1. Jul 2004
Ort: Berlin
208 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: Fehlermeldung "Zu wenig Arbeitsspeicher"

  Alt 6. Aug 2008, 13:36
Ja, das hab ich geändert. Das Problem ist aber, daß der Fehler bei mir selbst sowieso noch nie aufgetreten ist; also nicht vor und auch nicht nach der jetzigen Änderung. Der Fehler tritt nur sporadisch (1-5 mal pro Monat) bei dem Benutzer der Software auf und so ist das schwierig herauszufinden, ob es was gebracht hat.

Du meinst aber also schon, daß es daran gelegen haben könnte?

Gruß
Micha
Der Weg ist das Ziel...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  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 21:55 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