Zeiger auf Array probs



  • Hi Liste,
    folgendes Problem:
    ich habe zwei arrays:
    2.) struct.member :

    struct layer_data {
    ....
    ...
    short block[12][64]
    } base, enhan, *ld

    in 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 Warnung

    assignment 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!


Anmelden zum Antworten