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: