Wie bekomme ich die Länge eines dynamisch erstellten Arrays von Strukturen in C?

8

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?

    
beta 03.01.2012, 19:03
quelle

4 Antworten

14

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 .

    
NPE 03.01.2012, 19:04
quelle
5

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.

    
dasblinkenlight 03.01.2012 19:04
quelle
2
%Vor%

ist ein pointer und kein array . Um array von zwei Elementen von mydata zu erstellen, müssen Sie Folgendes tun:

%Vor%

Zweitens, um zwei Elemente von mydata mit malloc() zuzuweisen, müssen Sie Folgendes tun:

%Vor%

OTOH, Länge für dynamisch zugewiesenen Speicher (mit malloc() ) sollte vom Programmierer (in den Variablen) beibehalten werden - sizeof() kann das nicht verfolgen!

    
Sangeeth Saravanaraj 03.01.2012 19:05
quelle
1

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:

%Vor%

Das wird wahrscheinlich immer 0 sein.

    
Carl Norum 03.01.2012 19:08
quelle

Tags und Links