Forum: Compiler & IDEs Problem mit malloc


von Georg (Gast)


Lesenswert?

Hab hier n problem mit folgendem code:
1
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?

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

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

von I_ H. (i_h)


Lesenswert?

1
(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:
1
(double *)malloc(WIDTH*HEIGHT*sizeof(double));

Ein double hat übrigens 8 Byte...

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von yalu (Gast)


Lesenswert?

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

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

darauf zugreifen.

von yalu (Gast)


Lesenswert?

... oder sauberer:
1
  double (*workarray)[HEIGHT] =
2
    (double (*)[HEIGHT])malloc(WIDTH*sizeof(double [HEIGHT]));

von Georg (Gast)


Lesenswert?

ok, danke, hat jetz geklappt. . .

von Simon K. (simon) Benutzerseite


Lesenswert?

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

Sofern WIDTH und HEIGHT konstant sind.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.