009
16.07.2010, 13:35 Uhr
Hans
Library Walker (Operator)
|
Hi,
das klingt nach einem (Online?)Kurs, wo ein (möglicherweise virtueller) Lehrer den Stoff und die Aufgaben vorgibt. Aber das nur nebenbei. Was da verlangt wird ist folgendes: Du hast neben Deiner Adressstruktur:
C++: |
struct Adresse { char *name; char *straße; char *stadt; };
|
einen Zeiger auf diese, also etwa:
antelle von
C++: |
Adresse useradressen[11];
|
Nun sollst Du damit versuchen, Deine Daten zu verwalten, wobei immer nur soviel Speicher belegt wird, wie auch Adressen eingegeben wurden. Wenn also nur eine Adresse eingegeben wurde, ist auch nur Speicher für eine Adresse belegt. Hast Du dagegen 10 Adressen eingegeben, ist auch Platz für 10 belegt. Was dem Menschen da vorschwebt, ist folgendes: Du reservierst erst mal Speicher für einen Datensatz, d.h. eine Adresse. Wenn Du eine weitere eingeben willst, erweiterst Du den Platz um eins, so dass Du Platz für zwei Adressen reserviert hast. Das Spiel geht so lange, bis Du alle Adressen eingegeben hast. Wenn Du dann eine Adresse löschst, die sich irgendwo innerhalb dieses Speicherbereichs befindet, dann soll das Programm die Adresse, die am Ende des belegten Speichers steht, an die Stelle verschieben, wo Du zuvor gelöscht hast und anschliessend den Speicherplatz verkleinern. Im Ergebniss hast Du dann immer noch genau soviel Platz belegt, wie Du für die Adressen benötigst, nicht mehr und nicht weniger. (Das ist übrigens wirklich keine elegante Lösung, aber eine gute Übung zur Speicherverwaltung. )
Ach ja: Da es sich um C++ handelt, sollten für die Aktionen zum Speicher anfordern und freigeben die "Befehle" bzw. Operanden new und delete in den Beispiellösungen auftauchen, so es welche gibt. Wenn dort dagegen malloc(), realloc() und free() auftauchen, handelt es sich nicht um C++ sondern um C, was ein unschönes und fehleranfälliges mischen der Sprachen bedeutet. Hans -- Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung. Dieser Post wurde am 16.07.2010 um 13:39 Uhr von Hans editiert. |