Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Arbeitsspeicher löschen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
22.01.2005, 19:00 Uhr
sedo



Ich mache folgende Schritte:

1) Ich lege Adressen an (z.B 5 Adressen).
2) Ich speichere sie in eine Datei auf der Festplatte.
3) Danach öffne ich diese Datei.

Nun habe ich folgendes Problem:

Da ich vor dem öffnen der Datei, den Arbeitsspeicher nicht leere, habe ich nachdem öffnen der Datei alle Adressen doppelt im Arbeitsspeicher. Deswegen möchte ich ihn vor dem öffnen der Datei leeren, oder nach dem öffnen der DAtei überschreiben.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
22.01.2005, 19:17 Uhr
Pablo
Supertux
(Operator)


das hat mich mehr verwirrt.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 22.01.2005 um 19:17 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
22.01.2005, 19:26 Uhr
sedo



Warum verwirrt? Ist doch ganz einfach, oder?

Also noch einmal. Ich programmiere eine Adresseverwaltung.

Aufgaben der Funktionen:

adresseAnl: Hier lege ich Adressen an. Speicherreservierung.

adresseLoe: Hier lösche ich bestimmte Adressen( je nach Eingabe)

adresseSuc: Hier suche ich eine bestimmte Adresse

adresseSp: Hier speichere ich alle angelegten Adressen auf eine DAtei ab.

adresseEin: Hier öffne ich die Datei mit den Adressen.


Nun folgendes:

Wenn ich nach dem abspeichern der Adressen das DOS-Fenster schließe, wird der Arbeitsspeicher geleert. Danach kann ich eine Datei öffnen.

Wenn ich aber das DOS-Fenster nicht schließe und eine Datei öffne, habe ich alle Adressen doppelt. Da ja alle Adressen noch im Arbeitsspeicher sind und dann nocheinmal die gleichen Adressen aus der Datei kommen. Deswegen möchte ich selber den Arbeitsspeicher leeren, damit die Adressen nicht doppelt vorkommen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
22.01.2005, 23:31 Uhr
Hans
Library Walker
(Operator)


Hi,

es könnte sein, das ich jetzt Unsinn schreibe, weil ich nicht so genau geguckt habe, aber mir scheinen folgende Probleme aufgefallen zu sein (meine Güte, das klingt irgendwie geschwollen...)
Zum einen musst Du ja für jede Adresse, die Du anlegst, Speicher reservieren, weil Du ja mit einer verketteten Liste arbeitest, wenn ich das richtig sehe. Wenn Du für jede Adresse separat Speicher reservierst, musst Du den Speicher auch für jede Adresse separat wieder freigeben. Zum einen, weil die Speicherbereiche sehr wahrscheinlich nicht hintereinander liegen, zum anderen, weil free() nur den Speicherblock wieder frei gibt, den ein vorheriger Aufruf von malloc() reserviert hat.
Ach ja, und eine Datei, die man geöffnet hat, sollte man auch wieder schliessen. (Es könnte zwar sein, das Du das in Deiner Aussage impliziert hast, aber weil es da nicht steht... )


Zitat:
Wenn ich aber das DOS-Fenster nicht schließe und eine Datei öffne, habe ich alle Adressen doppelt. Da ja alle Adressen noch im Arbeitsspeicher sind und dann nocheinmal die gleichen Adressen aus der Datei kommen.

Das stimmt so nicht. Das scheint zwar so zu sein, muss aber nicht auf alle Speicherbereiche zutreffen.

Zitat:
Deswegen möchte ich selber den Arbeitsspeicher leeren, damit die Adressen nicht doppelt vorkommen.

Die saubere Lösung ist in diesem Fall, das Du den Speicher initialisierst, bevor Du ihn benutzt. Das heisst, wenn Du den Zeiger hast, den malloc() Dir übergeben hat, dann ist die erste Aktion, die Du durchfürst die, das Du alle Felder der Struktur mit Nullen (oder Leerzeichen) füllst, bevor Du irgend was anderes da rein schreibst.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 22.01.2005 um 23:32 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: