C++ speicher ausgeben, aber wie?

5 Antworten

Array ist ein Pointer.

Ein Pointer ist eine Speicheradresse und auf einem 32Bit System immer 4 Byte lang und auf einem 64Bit System 8 Byte lang.

Du hast "array" als int-Pointer deklariert. In einem 32 Bit System (Compiler kompiliert als 32 Bit), ist ein jeglicher Pointer 32 Bit groß, also 4 Byte.

Dann hast du hinter der Adresse von dem Pointer 8 Byte allociert, ... heißt du könntest jetzt mit dem Pointer da 2 Integer a 32 Bit (also 8 Byte) reinschreiben. Hat aber nix mit der Größe dieses Pointers zu tun.

Wieviel Speicher auf der Adresse liegt musst du dir selbst merken. Sonst kommt du in Bereiche die im besten Fall nicht zu deinem Programm gehören und Das Betriebssystem das Programm abschießt, im Worst-Case funktioniert dein Programm wieter aber produziert irgendwann total irrationale Bugs. Generell sollte man Speicher soweit möglich lieber auf dem Stack legen. Heap-Speicher muss selbst verwaltet und wieder freigegeben werden.

Wieviel Speicher du zur Laufzeit reserviert hast, kannst du gar nicht auslesen. Du musst es zusammen mit dem Pointer verwalten oder eine fertige Klasse wie std::vector verwenden, die dir genau diese Aufgabe abnimmt.

Woher ich das weiß:Studium / Ausbildung
Du steckst 8 Byte rein und fragst die Größe aber in Char ab. wenn Du 8 Charakter als Arraygröße willst, musst Du 
malloc(8 * sizeof (int)) reinstecken.
constexpr size_t bufsz { 8 };
using arr_type = int;

arr_type * const arr { new arr_type[bufsz] {} };
// oder ...
// arr_type * const arr { malloc(sizeof(*arr) * bufsz) };

cout << sizeof(arr) << endl;
cout << (sizeof(arr) * bufsz) << endl;

for (size_t i {}; i < bufsz; ++i) {
  arr[i] = static_cast<arr_type>(i);
  cout << arr[i] << endl;
}

delete[] arr;
// oder ...
// free(arr);
Woher ich das weiß:Berufserfahrung