Zeiger auf Array probs
-
Hi Liste,
folgendes Problem:
ich habe zwei arrays:
2.) struct.member :struct layer_data {
....
...
short block[12][64]
} base, enhan, *ldin main(){
...
blocks =
(short ()[64])malloc(mb_width*mb_height2*block_countsizeof(short [64]));
...jetzt mein Problem
ich will das array [64] werte aus ld->block[comp]
den blocks zuweisen
bei
blocks[MBA*block_count+comp] = ld->block[comp];
bekomme ich die Warnungassignment makes integer from pointer without a cast
und die Werte werden nicht zugewiesen.
hat jemand eine idee
Gruß Markus
[list][list]
-
Welcher Typ ist den blocks? Zum kopieren von Arrays, solltest du memcpy nehmen!
BTW.
Caste den Rückgabewert von malloc nicht!
-
es funktioniert ganz einfach:
for (comp=0; comp<block_count; comp++)
{
for (i = 0; i < 64; i++)
{
blocks[MBA*block_count+comp][i] = ld->block[comp][i];}
}
}
bist du dir sicher das es beim allociern sich um ein casting
handelt ?
s heist jan nicht (short) *malloc !
trozdem danke
Gruß Markus
-
nur so nebenbei: Wenn Du willst, dass viele Leute Deinen Beitrag lesen und evtl. kommentieren, solltest Du Code-Tags für Deine Sources verwenden...
[ Dieser Beitrag wurde am 08.01.2003 um 18:56 Uhr von mady editiert. ]
-
Original erstellt von cansi:
*s heist jan nicht (short) malloc !Casting != Dereferenzieren
Der Rückgabewert von malloc ist void* und das kann der Compiler implizit Casten. Jetzt denkst du wahrscheinlich "haha, dann ist es doch egal ob ich den Cast nehme oder nicht". Das ist es aber nicht, da du zB vergessen könntest stdlib.h zu includieren und dem Compiler keine passende Funktionsdefinition vorliegt, nun gibt es die explizit int Regel bei C (oder gab es, weiss gar nicht ob das für C99 noch gilt)dh., dass der Compiler von so einer definition ausgeht int malloc(...), wenn nun aber auf einer Platform sizeof(int)!=sizeof(void*) ist, dann hast du ein Problem! Deswegen lieber den Cast weglassen. Da C++ diesen Cast verlangt, ist es leider sehr gebräuchlich, obwohl man unter C++ lieber new nehmen sollte anstelle malloc!