Seite abonnieren
Artikel
Kommentare
Anmelden

Archiv für die 'C/C++ & Java' Kategorie

Dynamische Speicherverwaltung in C++

Der Unterschied zwischen statischem Speicher und dynamischem Speicher ist der, daß der Programmierer dynamischen Speicher explizit bereitstellen lassen muss und bei Nichtgebrauchen wieder freigeben sollte.

Nehmen wir an, wir haben ein Float Array mit 100 Feldern. Beim Kompilieren des Programms wird nun 100 * sizeof(float) Bytes bereitgestellt. Wir haben also 100 Mal 4 Byte zur Verfügung. Was aber, wenn wir von diesen 100 nur 15 brauchen? Wir würden in diesem Fall mit 340 Byte unnötiger Weise den Arbeitsspeicher füllen. Oder was passiert, wenn wir plötzlich mehr als 100 Felder brauchen? Mit statischem Speicher ist eine Nachträgliche Änderung der Größe des Speichers nicht mehr möglich. Deshalb greift der Programmierer zur dynamischen Speicherverwaltung, der nicht beim Kompilieren, sondern während der Laufzeit bereitgestellt wird;

Wir erstellen ein Objekt des Datentyps und fügen nur so viele Felder in das Array, wie wir es in diesem Augenblick brauchen.
int size, *vector;
cout < < "Bitte grösse des Feldes eingeben:";
cin >> size;
vector = new int[size];
....

Nachträgliches Ändern der Größe ist möglich. Diese Art von Speicherverwaltung birgt aber auch viele Gefahren, denn alloziierter Speicher, der Verfügung gestellt wird, muss genau so wieder freigegeben werden, wenn er nicht mehr gebraucht wird.
delete [] vector;

Als Abschluss ein ganz kleines Beispiel:
struct a {
int nummer;
char *art_bez;
double preis;
int st;
int v_st;
}

void init (struct a &, int nummer, const char *art_bez, double preis, int st; int v_st=0) {
a.nummer = nummer;
a.art_bez = new char [strlen(art_bez)+1];

if (a.art_bez == NULL) {
cerr < < "Fehler ..." << endl;
exit(EXIT_FAILURE); }

strcpy(a.art_bez, art_bez);
a.preis = preis;
a.st = st;
a.v_st = v_st;
}

parkhaus.c

Ein Parkhaus System, welches eine bestimmte Anzahl an Autos parken lässt.

Projektbeschreibung:
Zweidimensionale Arrays

Entwerfen Sie ein Array für einen (Valetparking) Parkhaus mit 2 Gängen a 20 Buchten.
- Im Array wird gespeichert, ob ein Platz Frei (’F') oder Belegt (’X').
- Morgens ist der gesamte Parkplatz frei. Fahrzeuge können nur in freien Buchten geparkt werden.

parkhaus.c (ohne menü)

Anmerkung: Es wird ein C Compiler benötigt

Structs

Nachdem wir Zweidimensionale Arrays abgehandelt haben, lautet das aktuelle Thema in der C Vorlesung structs.

#Definition
struct datentyp {
variable1
variable2
….
};

Mit structs können wir mehrere Variablen mit verschiedenen Datentypen zusammenfassen. Dadurch ist das Zusammenhängende gleichzeitige ändern, zugreifen und anzeigen mehrerer Variablen möglich. Bisher gingen wir bei Variablen-Deklaration so vor:

char vname[20];
char nname[20];
long PLZ;
char ort[20];
int geburtsjahr;

Nun können wir diese zusammenfassen:

struct adres {
char vname[20];
char nname[20];
long PLZ;
char ort[20];
int geburtsjahr;
};