# Zeiger auf Array von Strukturen

• Hallo alle zusammen,

kann mir jemand sagen, was ich hier falsch mache?

``````[code]
#include <stdio.h>
#include <stdlib.h>

struct Sensors {
unsigned char cs;
unsigned char channel;
};

struct Sensors * Gyros(void)
{
struct Sensors GyroX = {1, 2};

struct Sensors GyroY = {3, 4};

struct Sensors Gyros[2] = {GyroX, GyroY};

struct Sensors *pGyros = Gyros;

return pGyros;
}

int main(void)
{
struct Sensors * pGyros;

pGyros = Gyros();

unsigned char i;
for (i=0; i<2; i++) {
printf("%d %d\n", pGyros->cs, pGyros->channel);
pGyros++;
}

return 0;
}

[/code]
``````

Als Ausgabe erhalte ich:

1 2
170 191

Vielen Dank,

Lisa

• struct Sensors Gyros[2] is lokal und wird ungültig nach verlassen deiner funktion. der pointer den du zurückgibts zeigt also auf müll. wenn du es so machen willst muss dein Gyros[2] aufn heap -> malloc().

• Vielen Dank für die schnelle Antwort, genau daran lag es!

So geht es:

``````[code]
#include <stdio.h>
#include <stdlib.h>

struct Sensors {
unsigned char cs;
unsigned char channel;
};

struct Sensors * Gyros(void)
{
struct Sensors GyroX = {1, 2};
struct Sensors GyroY = {3, 4};

struct Sensors *Gyros = (struct Sensors *) malloc( 2 * sizeof(struct Sensors) );

Gyros[0] = GyroX;
Gyros[1] = GyroY;

return Gyros;
}

int main(void)
{
struct Sensors * pGyros;

pGyros = Gyros();

unsigned char i;
for (i=0; i<2; i++) {
printf("%d %d\n", pGyros->cs, pGyros->channel);
pGyros++;
}

return 0;
}
[/code]
``````

• Vielen Dank für den Hinweis, das ganze sieht jetzt so aus:

``````[code]
#include <stdio.h>
#include <stdlib.h>

struct Sensors {
unsigned char cs;
unsigned char channel;
};

struct Sensors * Gyros(void)
{
struct Sensors GyroX = {1, 2};
struct Sensors GyroY = {3, 4};

struct Sensors *Gyros = malloc( 2 * sizeof(struct Sensors) );

Gyros[0] = GyroX;
Gyros[1] = GyroY;

return Gyros;
}

int main(void)
{
struct Sensors * pGyros;

pGyros = Gyros();

unsigned char i;
for (i=0; i<2; i++) {
printf("%d %d\n", pGyros->cs, pGyros->channel);
pGyros++;
}

return 0;
}
[/code]
``````

Leider scheint mein Mikrocontroller für den ich das Programm schreibe (AT91SAM9XE512), die Funktion malloc() nicht zu kennen. Ich habe die Strukturen jetzt global definiert und initialisiert.

Gruß Lisa.