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

Andreas

Frischling

  • »Andreas« ist der Autor dieses Themas

Beiträge: 77

Beruf: Schüler

  • Private Nachricht senden

1

24.07.2007, 10:44

tbModel - Zeiger?

Hallo, ich hab mal ne Frage zum Verständnis beim Behandeln von tbModeldaten:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
tbModel*                Haus;

// Das Stadtmodell laden

    Haus = new tbModel;
    if(Haus->Init("City.tbm@Data\\City.zip", "", "@Data\\City.zip"))
    {
        MessageBox(tbDirect3D::Instance().GetWindow(), "Fehler beim Laden der Stadtmodelldatei!",
                   "Fehler", MB_OK | MB_ICONEXCLAMATION);
        CleanUp();
        return 1;
    }


Warum wird ein tbModel und auch tbFont immer als Zeiger initialisiert (tbModel*) ? Wenn ich dann ein Array davon anlege, muss ich dann für die Größe eines Elements mit der Größe von 4 Bytes rechnen (wegen Zeiger), oder mit der wahren Größe von tbModel?

Vielen Dank für eine Antwort

Andreas

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

2

24.07.2007, 10:57

Sie werden vermutlich als Zeiger initialisiert, damit sie auch außerhalb der Funktion noch existieren, denn lokale Variable werden wieder freigegeben wenn die Funktion in der sie erstellt wurden beendet wird.

In einem Array aus Zeigern auf ein tbModel ist jedes Element natürlich nur so groß wie ein Zeiger, nicht wie das Objekt selbst.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

3

24.07.2007, 11:31

Zitat von »"rewb0rn"«


In einem Array aus Zeigern auf ein tbModel ist jedes Element natürlich nur so groß wie ein Zeiger, nicht wie das Objekt selbst.


Der Platz den ein tbModel Objekt braucht wird trotzdem verbraten! :)
@D13_Dreinig

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

4

24.07.2007, 11:33

wie?

C-/C++-Quelltext

1
tbModel* Array[X];

verbraucht doch nur soviel Speicher wie X groß ist mal Größe eines Zeigers?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

5

24.07.2007, 11:36

Jaahh, aber sobald du das Array zu füllen beginnst brauchst du vollständig konstruierte Objekte und die verbrauchen Platz. Aber die Elemente selbst sind natürlich nur sizeof( ( void* )0 ) groß.
@D13_Dreinig

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

6

24.07.2007, 11:42

ja natürlich :) (ohne die null meinst du wohl ;) )

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

7

24.07.2007, 11:52

Nö, ich mein mit der 0! Aber ohne 0 gehts auch. :)
@D13_Dreinig

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

8

24.07.2007, 12:02

ich gebe mich geschlagen^^

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

9

24.07.2007, 12:05

Zitat von »"rewb0rn"«

ich gebe mich geschlagen^^


*Ha* In Siegerpose hinstell! :-))) Okok, was war das Thema doch gleich? :)
@D13_Dreinig

Andreas

Frischling

  • »Andreas« ist der Autor dieses Themas

Beiträge: 77

Beruf: Schüler

  • Private Nachricht senden

10

24.07.2007, 16:05

Vielen Dank für die Antworten!

Wenn ich jetzt ein Array von tbModelObjekten mit malloc erstellen möchte muss ich schreiben:

C-/C++-Quelltext

1
Array = (tbModel*)malloc(sizeof(tbModel*)*5);


Wäre also folgendes Speicherverschwendung:

C-/C++-Quelltext

1
Array = (tbModel*)malloc(sizeof(tbModel)*5);


Habe ich das richtig verstanden?
Viele Grüße
Andreas

Werbeanzeige