CStringArray Speicher-Allokierung...Frage
-
Hi,
ich bin (immer noch) an meinem kleinen Programm welches eine Datei Zeilenweise einliest und dann wieder bestimmte Zeilen in eine andere Datei schreibt. Dabei ist mir etwas aufgefallen, was ich nicht verstehe (Obwohl es eine wohl einfache Erklärung dafür gibt):
Ich lese die Datei per while(...) in einen CStringArray ein (catchedwords.Add(Zeile); ) und lasse später per for Schleife (catchedwords.GetAt(i)) alle Elemente durchlaufen und wenn diese Elemente für mich "OK" sind schreibe ich Sie in eine Datei. Soweit klappt alles. Soalnge die Datei eingelesen und der Array gefüllt wird wächst der Speicherbedarf meine Anwendung immer mehr an (logisch)...am Ende meiner Schleife wenn also alle elemente überprüft und ggfs. in die neue Datei geschrieben wurden springt der Speicherbedarf aber plötzlich wieder auf den Startwert zurück (+ ein paar wenige Bytes).
Diese Verhalten verstehe ich nicht :-? Löscht Window (oder wer auch immer) meinen Array von selbst ? Kann ja sein daß ich den noch länger bräuchte somit wäre dieses Verhalten ja total übel. In meinem Fall ist das Verhalten ja erwüntscht aber ich wollte das Array eigentlich mit catchedWords.RemoveAll(); selbst löschen :-?
Und die Zweite Frage wäre ich habe die Definition CStringArray catchedWords; noch in meiner Funktion sprich bei jedem Durchlauf wird die Definition erneut aufgerufen, ist das schlimm und ich mach das besser in den OnInitDlg() Oder kann man das lassen ?
Thx
ray
-
sagen wir mal du hast eine funktion in der du ein object in deinem fall CStringArray deklarierst und definierst. wenn du diese funktion aufrufst, wird speicher reserviert und gebraucht. am ende der funktion wird der speicher allerdings wieder freigegeben.
falls du dein object "behalten" willst, musst du das als membervariable deklarieren. in deiner dialog klasse zum beispiel. und dann in einer member function damit arbeiten. nach dem aufruf der member function kannst du die variable auch noch in anderen methoden diesr dialog klasse benutzen.