HeapOverflow/RunError(203) bei dynam. StringList [gelöst]

Für Fragen von Einsteigern und Programmieranfängern...
Benutzeravatar
theo
Beiträge: 10872
Registriert: Mo 11. Sep 2006, 19:01

Re: HeapOverflow/RunError(203) bei dynamischer StringList

Beitrag von theo »

Um die Übertragung von Stringlist nach HTML geht es bestimmt nicht. Die Schnittstelle ist ein String.
Wenn, dann besteht der Fehler im HTML Panel bei SetHTMLFromString.
Wahrscheinlicher ist aber immer noch, dass dein Code einen (Speicher-) Bock hat, der sich nicht in jeder Situation zeigt,

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: HeapOverflow/RunError(203) bei dynamischer StringList

Beitrag von Michl »

Was ist denn?:
and4more hat geschrieben:

Code: Alles auswählen

    makeContent(Sender);
Beziehungsweise
and4more hat geschrieben:es handelt sich im Prinzip um ein ganz simples Programm, welches im Grunde nur aus einem Hauptfenster mit Notebook-Tabs und Eingabefeldern besteht. Diese werden in einer StringList abgelegt und das Ganze in ein Memofeld und ein HTML-Feld übertragen
Dann poste es doch hier, so wie es ist, wenn du es nicht weiter reduzieren kannst.

Ein einfacher Test:

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
var
  HTML: TStringList;
begin
  HTML := TStringList.Create;
  HTML.Add('<html><body bgcolor="#FF9900">Test Text</body></html>');
  IpHtmlPanel1.SetHtmlFromStr(HTML.Text);
  HTML.Free;
end;
Gibt bei mir jedenfalls keine Speicherlecks.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

and4more
Beiträge: 207
Registriert: Do 15. Nov 2012, 19:13
OS, Lazarus, FPC: Windows 10, Manjaro Linux, Lazarus 1.6.4 (32/64 Bit)
CPU-Target: 32 Bit / 64 Bit

Re: HeapOverflow/RunError(203) bei dynamischer StringList

Beitrag von and4more »

So, zunächst mal ein dickes 'Tschuldigung für meine lange Abscence, war leider beruflich stark eingebunden und brauchte dann doch etwas Zeit um die guten Ratschläge auszuprobieren und ein paar Tests laufen zu lassen. Zunächst hatte ich den Code so geändert wie michl vorgeschlagen hatte und auch sein Beispiel kompiliert. Beispiel lief wunderbar (Dank an michl), Programmcode führte zu einem Fehler diesmal irgendeine banale Exception. Also hab# ich mir gedacht, dass es wohl möglicherweise nicht am Pascal-Code liegen könnte und kommentierte große Teile des HTML-Codes aus. Und siehe da, das Programm stellte auch die HTML-Teile wieder korrekt dar. Also habe ich den HTML-Code durch eine Validator geschickt und korrigiert und jetzt arbeitet es zumindest bei der Darstellung des HTML-Codes korrekt, allerdings hab' ich plötzlich Probleme mit der Druckausgabe über IpHtml, aber das ist ein anderes Thema :wink:
Leider scheint der HTML-Parser von IpHtml fehlerhaften HTML-Code zur Laufzeit oder bei Kompilierung nicht abzufangen, so dass dann solche unklaren Laufzeitprobleme auftreten. Also im Falle des Falles auch mal da dran denken. Ich betrachte das Thema als gelöst und darf mich nochmal ganz herzlich bei allen für die Mühe bedanken. Ciao
Lazarus 1.6.4 32-Bit + 64-Bit, Windows 10 64-Bit, Manjaro Linux 64-Bit

and4more
Beiträge: 207
Registriert: Do 15. Nov 2012, 19:13
OS, Lazarus, FPC: Windows 10, Manjaro Linux, Lazarus 1.6.4 (32/64 Bit)
CPU-Target: 32 Bit / 64 Bit

Re: HeapOverflow/RunError(203) bei dynam. StringList [gelöst

Beitrag von and4more »

Leider, leider habe ich festgestellt, dass die Kompilierung auf 64 Bit eingestellt war und es daher klappte :( Nach Umstellung auf 32 Bit wieder der gleiche Fehler.
Also war es doch nicht der HTML-Code. Und so habe ich jetzt im Sinne eines Workarounds auf Lazarus Version 1.4.4 downgegraded und jetzt klappt wieder alles. Für mich bedeutet das in der Konsequenz, dass ich in Zukunft vor einem Upgrade erst mal testen muss, ob alles noch funktioniert. War da wohl etwas zu naiv. Danke noch mal an Alle für die Hilfe.
Lazarus 1.6.4 32-Bit + 64-Bit, Windows 10 64-Bit, Manjaro Linux 64-Bit

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: HeapOverflow/RunError(203) bei dynam. StringList [gelöst

Beitrag von Michl »

Wäre gut, wenn du hier ein Minimalbsp. hochladen könntest. Ein Bug kann nur gefixt werden, wenn er bekannt ist.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Antworten