int* work(int** pointer, int offset)
{
return *pointer + (offset/sizeof(int));
}
int main()
{
int** pointer = (int**) 0x4df73c;
int offset = 0xf4;
int* healthLowestPointer = work(pointer, offset);
while(true) {
*healthLowestPointer = 1000;
Sleep(250);
}
}
Version 2:
int* work(int* pointer, int offset)
{
return (int*) (*pointer + (offset/sizeof(int)));
}
int main()
{
int* pointer = (int*) 0x4df73c;
int offset = 0xf4;
int* healthLowestPointer = work(pointer, offset);
while(true) {
*healthLowestPointer = 1000;
Sleep(250);
}
}
Version 1 fonctionne correctement, mais la version 2 n » ne semble pas. Je ne comprends pas pourquoi la version 2 est cassée. Est-ce que déréférencer un pointeur à deux niveaux n'est pas la même chose que de déréférencer un pointeur à un niveau, c'est-à-dire qu'il saisit la valeur à l'adresse mémoire que le pointeur contient?
Comment est-ce que j'écrirais une fonction qui prend un pointeur de niveau n en entrée, et renvoie un pointeur de niveau 1 en déréférençant le pointeur n-1 fois?
Les deux versions sont UB. –
Bonne nuit SO, pas plus de ces questions aujourd'hui .../OFF –
@Armin: Je ne suis pas sûr de ce que vous voulez dire. La version 1 est cohérente et fonctionne toujours. – user2327287