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

kiba

Alter Hase

  • »kiba« ist der Autor dieses Themas

Beiträge: 327

Wohnort: NRW

Beruf: Azubi: Fach-Info. Anw.

  • Private Nachricht senden

1

09.04.2009, 15:22

array size vom heap

Hi, einfach frage wie kann ich die größe heraus finden die ich im heap reserviert hab:
hab es schon so versicht aber nützt nix:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>

using namespace std;
typedef unsigned char ubyte;

int main()
{
    ubyte* pixels = new ubyte[512*512*4];

    cout << "size pixels: " << sizeof(pixels) << endl << //size pixels: 4

            "size *pixels: " << sizeof(*pixels) << endl <<  //size *pixels:  1

            "array size: " << sizeof(pixels)/sizeof(pixels[0]) << endl; //array size:  4

            
    return 0;
}

Das Problem ist ja das pixels ein zeiger ist und kein wirklicher array.

Anonymous

unregistriert

2

09.04.2009, 15:28

Die Array-Größe auf dem Heap findest du nicht raus. Drum sollte man sich immer einen unsigned int mitnehmen.

Dieses sizeof/sizeof geht nur bei Arrays die auf dem Stack sind.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

3

09.04.2009, 15:46

Und wenn dich ein wenig overhead (kaum spürbar bei moderneren PC) nicht schreckt, wäre std::vector sicher ein Blick wert, weil es die C-array in eine Klasse kapseln.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

4

09.04.2009, 21:35

Bei manueller Speicherverwaltung ausserdem dran denken, zu jedem new ein delete und zu jedem new[] ein delete[] einzubauen. Wieder ein Grund für Container. ;)

5

09.04.2009, 21:50

Zitat von »"Nexus"«

Bei manueller Speicherverwaltung ausserdem dran denken, zu jedem new ein delete und zu jedem new[] ein delete[] einzubauen. Wieder ein Grund für Container. ;)

Und niemals zu einem new ein delete[] einbauen oder zu einem new[] ein delete.
Kann leicht mal passieren, wenn man nur das new ändert und nicht alle deletes findet oder sucht.
Man sollte wirklich die STL Container quasi überall benutzen, es sei denn, man hat gute Gründe dagegen (Performace kann einer sein, aber in den allermeisten Fällen sollte das passen).
Lieber dumm fragen, als dumm bleiben!

6

10.04.2009, 13:37

Zitat von »"Jonathan_Klein"«

Man sollte wirklich die STL Container quasi überall benutzen, es sei denn, man hat gute Gründe dagegen (Performace kann einer sein, aber in den allermeisten Fällen sollte das passen).
Performance gilt erst als guter Grund, wenn man sowas ausführlich unter gleichen Bedingungen profilet hat. Das heisst, Optimierungen an, Release-Modus, keine Debug-Laufzeitumgebung, Sicherheitschecks der STL abschalten. Und nicht aufgrund von Vorahnungen und Vermutungen.

Werbeanzeige