Einzelnen Beitrag anzeigen

DieFliege

Registriert seit: 6. Aug 2013
54 Beiträge
 
Delphi XE4 Professional
 
#1

Erhalte vom Programm "Keine Rückmeldung" - Speicherüberlauf?

  Alt 10. Nov 2015, 16:20
Hallo Gemeinde,

ich habe wieder mal ein Problem(chen) und hoffe auf Hilfe.

Zur Ausgangssituation:
Ich habe einen String mit bis zu 1000 Zeichen, den ich in einer Funktion bearbeiten möchte. Diese Funktion dient dazu den Text auf eine bestimmte Breite zu bringen (60 Zeichen). Weiterhin habe ich meiner Funktion beigebracht, dass der Test um 15 Zeichen eingerückt werden soll. Meine Funktion setzt auch brav den Zeilenumbruch (#13#10) an letzten Leerzeichen bevor die Zeilenbreite von 60 erreicht ist und rückt den Text ein - Zeile für Zeile. Anschließend übernehme ich den nun "neuen" String mit den Zeilenumbrüchen in die Zwischenablage.

Zum Problem:
Wenn ich nun eine Weile an meinen PC arbeite und einige Programme offen habe, erhalte ich irgendwann, wenn ich meine Funktion nutze, die Meldung des Programms (in dem meine Funktion agiert): "Keine Rückmeldung" Ich kann dann nur noch das Programm schließen und neu starten. Aber auch dann bekomme ich immer wieder diese Meldung. Starte ich aber meinen Rechner neu, ist das Problem erst mal wieder verschoben.

Nun habe ich mich etwas belesen und dabei festgestellt "Text := Text + WeitererText" sehr schnell den Arbeitsspeicher füllen kann. Da ich eine WHILE-Schleife verwende, kann es je nach Textlänge passieren, dass diese Variable vielfach im Speicher abgelegt ist. Abhilfe hier soll der StringBuilder sein, der den String innerhalb einer Variable zusammen setzt und damit den (vermutlichen Speicherüberlauf) verhindert. Dies ist jedoch nicht der Fall.

Darauf hin habe ich mir um der Sache auf den Grund zu kommen ein kleines Progrämmchen geschrieben, in dem ich in einer WHILE-Schleife einen Text X-mal hinter einen bestehenden anhänge, auf das Einrücken und Übernehmen des Strings in die Zwischenablage habe ich dabei noch verzichtet - Auch hier bekomme ich "Keine Rückmeldung". Dieses Progrämmchen habe ich einmal mit StringBuilder und einmal ohne, also "text := test + text" getestet.

Meine Frage nun:
Was genau habe ich übersehen, bzw. wie genau kann ich dieses vermutliche Speicherproblem umgehen? Wenn ich mich nicht verlesen habe ist eine Deklarierung der Variable mit "String" für 1000 Zeichen ausreichend, auch wenn ich noch einen Zeilenumbruch und den 15 Stellen Zeichenvorschub berücksichtige - oder?

Hat jemand einen Tipp, wie ich das Problem beheben kann? Gerne kann ich einmal ein kurzes Beispiel der Funktion hier posten - sobald ich wieder Zuhause bin und an meinen Quelltext komme. Würde mich über eine Rückmeldung freuen.

Liebe Grüße
Micha

Ps.: Verwende Delphi XE-XE4. Der Titel ist leider nicht sehr aussagekräftig, aber mir ist gerade nix besseres eingefallen
  Mit Zitat antworten Zitat