PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C: Zeiger-Array auf struct



Trillian
20-10-2001, 20:31
#include <stdio.h>
#include <stdlib.h>

struct foo
{
short bar;
};



int main()
{
struct foo **blafasel;

blafasel = malloc(10 * sizeof(struct foo *));

blafasel[0]->bar = 5;
printf("%i\n", blafasel[0]->bar);



return 0;
}

Also, ich brauche ein Array von 10 Zeigern auf diese struct. Wieso funzt der Code nicht?

iGEL
21-10-2001, 04:22
Moin!

Warum es nicht geht, kann ich dir nicht direkt sagen, daher lass ich meine Vermutungen mal weg. Das hier funktioniert:

#include <stdio.h>
#include <stdlib.h>

struct foo
{
short bar;
};

int main()
{
struct foo *blafasel[10];
int i;

for (i = 0; i < 10; i++)
blafasel[i] = malloc(sizeof(struct foo *));

blafasel[0]->bar = 5;
printf("%i\n", blafasel[0]->bar);

return 0;
}

cu Johannes

jgbauman
21-10-2001, 08:04
Trillian:
Du reservierst nur den Speicher fuer die Zeiger (vom heap), nicht aber den Speicher fuer die 10 structs (d.h. die pointer selber sind nicht initialisiert). => SEGFAULT

iGEL:
Du reservierst den Speicher fuer die Zeiger direkt auf dem stack und dann noch den Speicher fuer jedes struct auf dem heap.

Trillian:
Wenn du das Array von Zeiger nur in der Funktion in der es angelegt wird brauchst (und Funktionen die von dort aus aufgerufen werden) kannst Du iGELs Loesung benutzten, allerdings wuerde dann evtl auch einfach ein Array auf dem Stack reichen.
Ansonsten solltest Dir noch die for-Schleife aus iGELs Code hinter dein erstes malloc kopieren.

Trillian
21-10-2001, 10:03
Mmh, jo, ich verstehe...

Danke euch beiden :)