Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Giraffeln

Frischling

  • »Giraffeln« ist der Autor dieses Themas

Beiträge: 7

Wohnort: Dortmund

  • Private Nachricht senden

1

30.09.2008, 11:14

Singletons und Speicherplatz - Fragen

Ich habe mir letztens das Buch "C++ für Spieleprogrammierer" gekauft und bin echt begeistert davon! Geiles Buch, Heiko !!! :D

Nur leider habe ich trotzdem noch ein paar Fragen zu Themenbereichen, die ich nicht wirklich verstanden habe.

1. Speicherplatz / Speicherreservierung

Also Speicherplatz reserviert man bekanntlich durch das Schlüsselwort "new" und löscht / gibt den Speicher mit "delete" wieder frei. In meinem Fall wollte ich mal ein Array reservieren. Alles schön und gut.
Leider bin ich bei meinem Beispiel vollkommen verwirrt, da ich erstmal nur 10 Elemente reserviere und dann in der Schleife auf das 11. und 12. Elemente ohne Compilerwarnung oder Sonstiges darauf zugreifen kann. Komischerweise kommt aber, wenn ich auf das 14. Element zugreifen will, die Meldung, dass meine *.exe nicht mehr funktioniert ?!

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
int *pListe = new int [10];
    
    for ( int i = 0; i < 12; i++)
    {
        pListe [i] = i*i;
        cout << pListe [i] << endl;
    }
    
    delete[] pListe;
    pListe = NULL;



Und dann hätte ich noch eine abschließende Frage zu Speicherplatz: "Wofür braucht man Speicherplatz überhaupt?"
Ich weiß, dass man es braucht, wenn man z.B. einen "String" ( char Array ) abfragen will und der Benutzer trägt mehr Zeichen ein, als in den String passen oder wenn man mit dem Heap arbeiten will. Aber sonst ??

2. Singletons

Singletons wäre auch noch so ein Thema, wo ich keine Ahnung von habe. Trotz mehrmaligem Durchlesen des Themas im Buch, bin ich einfach nicht schlauer geworden.
Erstmal verstehe ich die Funktion "Get" nicht und dann ist mir noch unklar, wofür Singletons jetzt gebraucht werden ?!

Und könnte mir dann noch jmd. mal erklären, warum die Singleton Funktionen alle "static" gemacht wurden ?!

PS: Sorry, für meinen nicht ganz so starken Thread-Titel ... mir ist kein anderer eingefallen xD

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

30.09.2008, 12:07

Re: Singletons und Speicherplatz - Fragen

Zitat von »"Giraffeln"«


Leider bin ich bei meinem Beispiel vollkommen verwirrt, da ich erstmal nur 10 Elemente reserviere und dann in der Schleife auf das 11. und 12. Elemente ohne Compilerwarnung oder Sonstiges darauf zugreifen kann. Komischerweise kommt aber, wenn ich auf das 14. Element zugreifen will, die Meldung, dass meine *.exe nicht mehr funktioniert ?!


Nur weil man etwas machen kann heißt es noch lange nicht das man es auch machen sollte. Der Zugriff auf ungültige Indices hat immer ein undefiniertes Verhalten zur Folge. Das heißt es kann alles passieren: Programmabsturz, Selbstzerstörung des PCs, Atomarer Angriff etcpp...

Zitat von »"Giraffeln"«


Und dann hätte ich noch eine abschließende Frage zu Speicherplatz: "Wofür braucht man Speicherplatz überhaupt?"
Ich weiß, dass man es braucht, wenn man z.B. einen "String" ( char Array ) abfragen will und der Benutzer trägt mehr Zeichen ein, als in den String passen oder wenn man mit dem Heap arbeiten will. Aber sonst ??


Speicher brauchst du doch ständig. Ob für eine simple Integervariable oder für komplexe Objekte. Jedesmal wird Speicher benötigt.

Zitat von »"Giraffeln"«


Erstmal verstehe ich die Funktion "Get" nicht und dann ist mir noch unklar, wofür Singletons jetzt gebraucht werden ?!


Singleton Objekte werden häufig als ersatz für globale Variablen mit einigen Verbessschlechterungen verwendet. Die Hauptmerkmale eines Singletonobjektes sind: Global (überall) erreichbar und einzigartig (d.h. es gibt maximal eine Instanz des Typs). Selbstverständlich gibts noch einige Feinheiten und Unterschiede zwischen verschiedenen Singletonimplementierungen, aber das führt etwas zu weit an dieser Stelle.

Zitat von »"Giraffeln"«


Und könnte mir dann noch jmd. mal erklären, warum die Singleton Funktionen alle "static" gemacht wurden ?!


Statisch sind die Funktionen alle um zu gewährleisten, dass das Objekt von überall ohne gültige Instanz erreicht werden kann.
@D13_Dreinig

Giraffeln

Frischling

  • »Giraffeln« ist der Autor dieses Themas

Beiträge: 7

Wohnort: Dortmund

  • Private Nachricht senden

3

30.09.2008, 12:14

Gut ...

damit wären meine Fragen größtenteils beantwortet ...

Dann hätte ich aber noch eine Frage: "Kann man bei Speicherplatz herausfinden, wie viele Elemente mein Array hat ?"

Bei normalen Arrays ging das mit der "sizeof" - Funktion: "sizeof (Arrayname) / sizeof (Datentyp des Arrays)

Gibt es so was ähnliches auch bei der Speicherplatzreservierung ?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

4

30.09.2008, 12:16

Es gibt keinen Standardkonformen weg. Aber dafür gibts Platformabhängige Lösungen (Windows hat z.B. die Funktion _msize() für sowas) oder aber man schreibt sich was Eigenes.
@D13_Dreinig

Giraffeln

Frischling

  • »Giraffeln« ist der Autor dieses Themas

Beiträge: 7

Wohnort: Dortmund

  • Private Nachricht senden

5

30.09.2008, 12:19

ok ... danke David_pb

Vll. fallen mir später noch ein paar neue Fragen ein xD

6

30.09.2008, 12:53

Zitat

Kann man bei Speicherplatz herausfinden, wie viele Elemente mein Array hat ?

Wozu? Wenn du Speicherplatz reservierst, dann musst du doch angeben, wieviel. Also ist dir die Information bekannt, nutze sie. Desweiteren gibt es dafuer std::vector etc., mittels size() kann man die Anzahl der Elemente abfragen.

Giraffeln

Frischling

  • »Giraffeln« ist der Autor dieses Themas

Beiträge: 7

Wohnort: Dortmund

  • Private Nachricht senden

7

30.09.2008, 13:53

:oops:

Wenn man darüber nachdenkt, kommt man eigentlich darauf, dass man ja selber (immer) weiß, wie Speicherplatz reserviert wird. Man bin ich Noob!!

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

8

30.09.2008, 13:56

Man selbst weiß das vielleicht, das Programm aber nicht zwangsläufig. Deshalb muss, falls man die Anzahl nicht immer explizit mitreichen will, der aktuelle Wert irgendwo hinterlegt werden.
@D13_Dreinig

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

9

30.09.2008, 14:50

Zitat von »"David_pb"«

Man selbst weiß das vielleicht, das Programm aber nicht zwangsläufig. Deshalb muss, falls man die Anzahl nicht immer explizit mitreichen will, der aktuelle Wert irgendwo hinterlegt werden.


ja nun fragt sich inwieweit das sinnvoll ist. wäre dann vielleicht doch einfacher std::vector zu nehmen anstatt die länge des arrays mitzuspeichern, kommen wir zu tp zeiten zurück *schauder*

10

30.09.2008, 15:01

Zitat

kommen wir zu tp zeiten zurück *schauder*

Was fuer Zeiten? Manchmal gibt es keinen anderen Weg, z.B. beim Austausch von Daten zwischen Programm und DLLs, .Net, Java etc.

Werbeanzeige