Hartnäckigkeit zahlt sich oft aus: Heute habe ich ein Speicherleck (englisch „Memory leak“) in Zeta Producer korrigiert, das seit Version 5 drin war:
Beim Aufruf der Microsoft Scripting Engine habe ich beim Aufruf der Funktion IActiveScriptParse::ParseScriptText
irrtümlicherweise CStringT::AllocSysString
aufgerufen und den so angeforderten Speicher selbst nicht mehr freigegeben. Dies hätte ich jedoch machen müssen, was ich in der korrigierten Version nun mache.
Das hätte ich aber machen sollen! „RTFM“ hat Mario mir da gleich geantwortet als ich es ihm erzählt habe.
Hiermit also nochmals der ultimative Artikel wann wer für die Freigabe von Zeichenfolgen die mittels AllocSysString
reserviert wurden verantwortlich ist: „Allocating and Releasing Memory for a BSTR (Visual C++ Concepts)„.
Spiel‘ mal den Erklärbär und sage mir, warum da überhaupt mit BSTRs herumspielst. Bei ParseScriptText gibt es doch nur normale Unicode-Strings.
Ja wenn ich DAS noch wüßte. Inzwischen habe ich das auch entsprechend umgestellt.
Ich hätte ja auch gut mit BSTRs rumspielen können, ich hätte nur wieder freigeben müssen.