Forum: Compiler & IDEs malloc mit array auf struct-pointer


von Nico (Gast)


Lesenswert?

Hallo,

ich habe hier ein Problem. Es ist nur ein Gedankenspiel, aber ich 
verstehe es nicht. Angenommen ich habe einen struct:
1
struct adr
2
{
3
    int name[10];
4
    int vorname[10];
5
    int strasse[10];
6
    int wohnort[10];
7
8
} st_adr;

ich initialisiere diesen dann mit:
1
struct adr *my_adr2;
und reserviere Speicher:
1
my_adr2=(struct adr*)malloc(sizeof(struct adr));

ok. Wird compiliert. Aber wenn jetzt stelle ich mir die Frage, wie ich 
Speicher für eine Pointer-Array auf diesen struct reserviere.
1
    struct adr *my_adr[10];
Also, wie muss ich folgendes abändern, dass es compiliert wird:
1
my_adr=(struct adr*)malloc(sizeof(struct adr));
Alles versuche geben Fehlermedungen wie:
1
 error: incompatible types when assigning to type 'struct adr *[10]' from type 'struct adr *'

Es ist Schwachsinn, aber ich will es nur wissen. Bitte nicht auslachen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Dein Array

   struct adr *my_adr[10];

besteht aus zehn Pointern. Die hast Du damit bereits angelegt.

Möchstest Du auch, daß diese zehn Pointer auf was sinnvolles zeigen, 
musst Du für jeden einzelnen Pointer malloc aufrufen.

Also für my_adr[0] ... my_adr[9].

Zum Vergleich:

Mit

   struct adr my_adr[10];

legst Du ein Array, bestehend aus zehn Deiner Strukturen an. Kein malloc 
erforderlich.

Hiermit aber

   struct adr *my_adr;

   my_adr = (struct adr*) malloc(10 * sizeof (struct adr));

forderst Du dynamisch den Speicher für zehn Deiner Strukturen auf einem 
Rutsch an, und kannst den Pointer my_adr genauso verwenden wie das 
statische Array aus dem letzten Schritt.

von Nico (Gast)


Lesenswert?

Rufus Τ. Firefly schrieb:
> legst Du ein Array, bestehend aus zehn Deiner Strukturen an. Kein malloc
> erforderlich.

Ok. Danke.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.