Ich versuche gerade, die Länge eines dynamisch erzeugten Arrays zu erhalten. Es ist ein Array von Strukturen:
%Vor%Ich initialisiere mein Array so:
%Vor%Und dann änderte es die Größe mit realloc und begann, es mit Daten zu füllen.
Ich habe dann versucht, seine Größe mit dem beschriebenen Code hier .
%Vor%Diese Operation gibt 0 zurück, obwohl mein Array zwei Elemente enthält.
Könnte mir bitte jemand sagen, was ich falsch mache?
Wenn Sie die Größe eines dynamisch zugewiesenen Arrays kennen müssen, müssen Sie es selbst verfolgen.
Die sizeof(arr) / sizeof(arr[0])
-Technik funktioniert nur für Arrays, deren Größe zur Kompilierungszeit bekannt ist, und für C99s Arrays variabler Länge .
sizeof
kann nicht verwendet werden, um die Speichermenge zu finden, die Sie dynamisch mit malloc
zugewiesen haben. Sie sollten diese Nummer getrennt zusammen mit dem Zeiger auf den zugewiesenen Speicherbereich speichern. Außerdem müssen Sie diese Nummer jedes Mal aktualisieren, wenn Sie realloc
oder free
verwenden.
ist ein pointer
und kein array
. Um array
von zwei Elementen von mydata
zu erstellen, müssen Sie Folgendes tun:
Zweitens, um zwei Elemente von mydata
mit malloc()
zuzuweisen, müssen Sie Folgendes tun:
OTOH, Länge für dynamisch zugewiesenen Speicher (mit malloc()
) sollte vom Programmierer (in den Variablen) beibehalten werden - sizeof()
kann das nicht verfolgen!
Sie versuchen, einen ziemlich bekannten Trick zu verwenden, um die Anzahl der Elemente in einem Array zu finden. Leider arr
in Ihrem Beispiel ist nicht ein Array, es ist ein Zeiger. Was Sie also in Ihrer sizeof
Abteilung bekommen, ist:
Das wird wahrscheinlich immer 0 sein.
Tags und Links c