C++ 指针未正确返回值

C++ 指针未正确返回值,c++,pointers,reverse-engineering,C++,Pointers,Reverse Engineering,我在程序中返回指针的值时遇到问题,指针的值没有被保存,当它读取时返回null 标题代码: class PlayerHK : public Player { public: PlayerHK(); ULONG player_hp(); ULONG player_power(); ULONG player_hp2(); ULONG player_power2(); private: struct CPlayer { BYT

我在程序中返回指针的值时遇到问题,指针的值没有被保存,当它读取时返回null

标题代码:

class PlayerHK : public Player {
public:
    PlayerHK();

    ULONG player_hp();
    ULONG player_power();
    ULONG player_hp2();
    ULONG player_power2();

private:

    struct CPlayer
    {
        BYTE padding[0x20];
        ULONG hp;
        ULONG power;
    };

    CPlayer *player;
};
主要代码:

PlayerHK::PlayerHK() {

        player = reinterpret_cast<CPlayer*>(*reinterpret_cast<DWORD*>(0x00B1C4E5));

    }

    ULONG PlayerHK::player_hp() {
        return player->hp; //does not return the value
    }

    ULONG PlayerHK::player_power() {
        return player->power; //does not return the value
    }

    ULONG PlayerHK::player_hp2() {
        player = reinterpret_cast<CPlayer*>(*reinterpret_cast<DWORD*>(0x00B1C4E5));
        return player->hp; //returns the value
    }

    ULONG PlayerHK::player_power2() {
        player = reinterpret_cast<CPlayer*>(*reinterpret_cast<DWORD*>(0x00B1C4E5));
        return player->power; //returns the value
    }

当我运行的程序将读取PlayerHK时,该值是否不应保存?我忘记做什么了吗?

如果我理解正确,你会问为什么

player = reinterpret_cast<CPlayer*>(*reinterpret_cast<DWORD*>(0x00B1C4E5));
在构造函数中运行时将player设置为NULL,但在player_hp2或player_power2中运行时不设置为NULL


显而易见的答案是,当您构造对象时,该内存位置0x00B1C4E5保存值NULL,当您调用player_hp2或player_power2时,它保存不同的值。当构造函数运行时,可能尚未创建播放器,因此指向您正在读取的播放器的指针为空。

reinterpret\u cast*reinterpret\u cast0x00B1C4E5您认为这有什么作用?我几分钟前刚刚对这个问题进行了评论。为什么要删除它并再次询问?@eerorika显然它不可移植地读取地址0x00B1C4E5处的值,并将其视为CPlayer结构的地址。0x00B1C4E5是拾取指针的地址。@user4581301我相信此代码已加载到另一个进程中,希望从主程序读取值,可能是为了作弊在一场比赛中。因此,通过对游戏进行反向工程,可以提前知道这些值的地址,但是没有其他方法可以引用它们。