Problem mit struct Zugriff!!

hanni6al

Grünschnabel
Hallo @ all!!

Brauche dirngend Hilfe bei Structs folgendes!!

Mein Struct:
Code:
typedef struct _Polygon_
{
	int *x;
       int *y;

}Polygon;
Da ich mehrere x und y werte habe erstelle ich ein dynamisches array
Code:
int main()
{

Polygon pol;

pol.x = malloc(sizeof(int));
pol.x[0]= 10;

pol.x = realloc(pol.x, 3 * sizeof(int));
pol.x[1] = 20;
pol.x[2]= 30;
pol.x[3]= 50;

ausgabe(); => funktion zur ausgabe;

return 0;
}
Und jetzt möchte ich in der funktion meine eingelesen Werte ausgeben:
Code:
ausgabe()
{
  Polygon pol;
  printf("%d", pol.x[2]);
}
Aber das funktioniert einfach nicht WARUM NICHT ich komme einfach nicht weiter wäre sehr dankbar wenn mir jemand dabei helfen könnte!!
 
Genau den Fehler hat vor nicht mal einer Woche nen Freund gemacht.

Du erstellst die Variable ("pol") in der Funktion "main" und füllst sie. Da sie in der Funktion ist gilt sie auch nur da -> andere Funktionen können nicht zugreifen.

In der Funktion "Ausgabe" definierst du eine neue Variable die NICHTS mit der, aus der "main" Funktion zu tuen hat.

Schaue dir mal globale Variablen an, dass sollte helfen.
Oder die Feinere Variante: Übergib "pol" der Funktion "Ausgabe" durch einen Parameter.

Gruß
 
Und wie muss ich das übergeben damit ich dann bei ausgabe darauf zugreifen kann Globale Variablen darf ich nicht verwenden!

mfg
 
Es gibt 2 Möglichkeiten:

Entweder als Zeiger auf die Speicherstelle oder als Kopie.

Kopie-Methode:
Code:
int main()
{
...

ausgabe(pol); => funktion zur ausgabe;

...
} 

void ausgabe(Polygon pol)
{
  printf("%d", pol.x[2]);
}

Zeiger-Methode:
Code:
int main()
{
...

ausgabe(&pol); => funktion zur ausgabe;

...
} 

void ausgabe(Polygon *pol)
{
  printf("%d", pol->x[2]);
}


Die zweite Methode lässt zu das du in der Funktion "ausgabe" die Werte in "pol" so verändern kanst, da sie in "main" auch geändert werden.

Gruß
Anfänger
 
Hm, du musst deinen Speicher wieder freigeben ... Und darauf achten das du nicht ausversehen auf einen nicht existierenden Speicherbereich zugreifst! Deswegen ist das mit der festen 2 da ein wenig doof gelöst ;)
 
Hm, du musst deinen Speicher wieder freigeben ... Und darauf achten das du nicht ausversehen auf einen nicht existierenden Speicherbereich zugreifst! Deswegen ist das mit der festen 2 da ein wenig doof gelöst ;)

Das man ausversehen auf einen nicht existierenden Speicherbereich zugreift kann auch bei der ersten Variante passieren.
Man könnte natürlich die Größe über weitere Parameter angeben, aber das sollte ja auch nur ein Beispiel sein ;) .
 
Zurück