mikrocontroller.net

Forum: Compiler & IDEs Problem mit malloc


Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du ein Array definierst brauchst du kein malloc mehr, der Speicher 
wird automatisch reserviert.

Autor: I_ H. (i_h)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
(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:

Bewertung
0 lesenswert
nicht lesenswert
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:

Bewertung
0 lesenswert
nicht lesenswert
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:

Bewertung
0 lesenswert
nicht lesenswert
... oder sauberer:
  double (*workarray)[HEIGHT] =
    (double (*)[HEIGHT])malloc(WIDTH*sizeof(double [HEIGHT]));

Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, danke, hat jetz geklappt. . .

Autor: Simon K. (simon) Benutzerseite
Datum:

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

Sofern WIDTH und HEIGHT konstant sind.

Antwort schreiben

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

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.