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 191Vielen 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.