Wie kriege ich die Byte Anzahl eines arrays in C raus?


28.01.2023, 13:47

also ich möchte die speihcergröße haben, was ja gleich der anzahl an elementen sein müssten, aber bei int oder anderen datentypen wäre es wieder anders, wie kann ich also mehr oder weniger allgemein die speichergröße enies arrays rausfinden?

1 Antwort

Der malloc()-Aufruf liefert einen Speicherbereich auf dem Heap, der mindestens 13 Byte lang ist. Zur internen Verwaltung muss dessen Länge natürlich bekannt sein, aber das ist in C nicht transparent. Also lautet die kurze Antwort „es geht nicht“.

Du kannst natürlich in der Dokumentation Deines Compilers nachschauen, ob er eine Funktion getheapmemsize() oder so anbietet. Dann wird Dein Code mit anderen Compilern aber nicht mehr funktionieren. Und Du bekommst so oder so nur die tatsächliche Größe (vermutlich immer ein Vielfaches von 8).

Als letzte Möglichkeit kannst Du die Rückgabe von malloc() untersuchen. Vielleicht steht die Größe oder das Ende des Blocks in den 8 Bytes davor:

printf( "%lu %lu\n", ((size_t*)array)[-1]
                   , ((char**)array)[-1]-array )

Aber dieser Code zeigt UB (undefined behavior), und das Ergebnis kann sich schon im Debug- und Release-Code unterscheiden. Und wenn es Dir ganz wichtig ist, schau Dir den Quelltext von realloc() an. In dieser Funktion muss die aktuelle Größe ja irgendwie ermittelt werden.