void* used in arithmetic :-/



  • void foo(void* addr, int pos, int value)
    {
      int* memory;
      memory = (int*)(addr+pos);
      *memory = value;
    }
    

    Bei diesem Code kommt eine Warnung (bei MinGW wenn alle Warnungen ein sind)

    void used in arithmetic*

    Ansonsten wird es 100%ig ausgeführt...
    Wie soll ich die Zeile umschreiben, so dass keine Warnung mehr kommt...

    addr ist eine speicheradresse, pos ist offsetadresse in byte

    Der Code sollte möglichst kompakt sein...



  • TheShadow2000 schrieb:

    memory = (int*)(addr+pos);

    versuch's so
    memory = (int*)addr+pos;
    :xmas2:

    wenn's, wie du schreibst, besonders kompakt sein soll:

    void foo(void* a, int p, int v) {*((int*)a+p)=v;}
    


  • ja aber bei ...

    memory = (int*)addr+pos

    wird meine addr nicht mehr in 1-byte schritten, sondern in 4-byte schritten addiert...



  • hab was ausprobiert:

    memory = (int*)((char*)addr+pos);

    geht - aber das sieht kake aus... ich hab (in wirklichkeit) gar so stehen

    memory = (int*)((char*)array->memory+pos);

    gehts nicht einfacher?



  • caste nach char* und mach' ein Makro daraus...



  • ne makro will ich jetzt nicht - ich benötige das für DLL (der code ist nur ein teil)



  • TheShadow2000 schrieb:

    ja aber bei ...

    memory = (int*)addr+pos

    wird meine addr nicht mehr in 1-byte schritten, sondern in 4-byte schritten addiert...

    dann so:

    char *memory = (char*)addr+pos;
    

    mit void* sollte es gar nicht gehen.
    wenn, dann ist dein compiler kaputt, der kann ja nicht einfach was zu 'nem void* addieren...
    :xmas2:



  • ne mein Compiler ist nicht kaputt - void* wird bei mir wie char* behandelt - also in 1 byte schritten addiert... wenn ich alle warnungen einschalte, dann meckert der erst... (jaja klar)

    und char* kann ich auch nicht zu int* zuweisen



  • TheShadow2000 schrieb:

    ne mein Compiler ist nicht kaputt - void* wird bei mir wie char* behandelt - also in 1 byte schritten addiert...

    frei nach dem motto: 'it's not a bug - it's a feature' 😉
    ich mag mich jetzt täuschen, aber die meisten compilers woll'n es gar nicht haben, wenn man mit void* rechnen will...
    :xmas2:


Anmelden zum Antworten