www.mikrocontroller.net

Forum: GCC Problem mit malloc

Autor: Georg (Gast)
Datum: 08.05.2008 22:01

Hab hier n problem mit folgendem code:
double workarray[WIDTH][HEIGHT]   = (double *)malloc((WIDTH*HEIGHT*4));
gcc meckert was von "invalid initializer" . . . ich hab keine Ahnung
warum. . .

Sieht einer von euch, was da faul ist?
Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite
Datum: 08.05.2008 22:03

Wenn du ein Array definierst brauchst du kein malloc mehr, der Speicher
wird automatisch reserviert.
Autor: I_ H. (i_h)
Datum: 09.05.2008 04:37

(double *)malloc((WIDTH*HEIGHT*4));

Und das gewöhn dir mal ganz schnell ab, das ist fehlerträchtig und wie
man sieht hast du den Fehler auch gleich gemacht.

So schaut's gut aus:
(double *)malloc(WIDTH*HEIGHT*sizeof(double));

Ein double hat übrigens 8 Byte...
Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum: 09.05.2008 08:30

I_ H. wrote:

> Ein double hat übrigens 8 Byte...

Er kann auch 12 oder 16 haben.  Dafür gibt's ja sizeof.  Beim AVR-GCC
hat er derzeit übrigens wirklich 4 Byte.
Autor: yalu (Gast)
Datum: 09.05.2008 09:28

Wenn du das zweidimensionale Array tatsächlich dynamisch anlegen
willst, geht das so:
  double (*workarray)[HEIGHT] =
    (double (*)[HEIGHT])malloc(WIDTH*HEIGHT*sizeof(double));

Hinterher kannst du dann in gewohnter Weise mit
  workarray[x][y]

darauf zugreifen.
Autor: yalu (Gast)
Datum: 09.05.2008 09:38

... oder sauberer:
  double (*workarray)[HEIGHT] =
    (double (*)[HEIGHT])malloc(WIDTH*sizeof(double [HEIGHT]));
Autor: Georg (Gast)
Datum: 09.05.2008 09:42

ok, danke, hat jetz geklappt. . .
Autor: Simon K. (simon) Benutzerseite
Datum: 09.05.2008 10:16

Und warum nicht einfach .. ?
double workarray[WIDTH][HEIGHT];

Sofern WIDTH und HEIGHT konstant sind.

Antwort schreiben

Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos verwenden, Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel






webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net