Dynamischen Vektor in einer Struktur
-
Hallo, ich habe mal eine Frage zu dynamischen Vektoren innerhalb von Strukturen.
Das ganze sieht etwa so aus:
struct Zahlen { int *ptr; int anzahl; }
Wenn ich die Struktur erzeuge mache ich folgendes:
zahlen erzeuge() { Zahlen z = malloc(sizeof(zahlen)); z->ptr = NULL; z->anzahl = 0; return z; }
Soweit passt das auch , jetzt die frage wenn ich den dynamischen Vector beschreiben möchte muss ich doch erstmal für die einzelnen Elemente Speicher innerhalb des Vectors definieren, als beispiel hier 10 Int-Werte richtig?
int index = 10; while ( index > 0 ) { z->ptr[index] = malloc(sizeof(int)); index--; }
-
Nein. Du musst dem Pointer Speicher für die gewünschte Menge an ints zuweisen:
z->ptr = malloc(10 * sizeof(int));
für 10 ints mit den Indizes 0 - 9.
-
Tarsuinn schrieb:
Soweit passt das auch
Nö, das geht auch nicht durch den Compiler. Guck dir Zeile 3 mal an. Wofür ist da das malloc? Und in den Zeilen 4 und 5 nutzt du "->" statt ".".
Tarsuinn schrieb:
jetzt die frage wenn ich den dynamischen Vector beschreiben möchte muss ich doch erstmal für die einzelnen Elemente Speicher innerhalb des Vectors definieren, als beispiel hier 10 Int-Werte richtig?
Der Code den du gepostet hast macht überhaupt keinen Sinn. z.ptr ist NULL, und das dereferenzierst du dann. Das kann nur schief gehen.
#include <stdlib.h> typedef struct int_vector { int *ptr; size_t size; } int_vector; int resize_int_vector(int_vector *v, size_t new_size) { int *p = realloc(v->ptr, new_size); if (p != NULL) { v->ptr = p; v->size = new_size; return 1; } return 0; } void reset_int_vector(int_vector *v) { free(v->ptr); v->ptr = NULL; v->size = 0; } int main(void) { int_vector v = {}; if (resize_int_vector(&v, 500)) { v.ptr[499] = 45632; // Letzter gültiger Index. reset_int_vector(&v); } return 0; }