В чем ошибка? Почему я не могу получить нужное значение по адресу памяти?
Должно быть здоровье мое, а там число - мусор.

Virtual Memory Manager глубоко фиолетово на ваше здоровье! Он не обязан любому городскому сумасшедшему каждый раз выделять память по одному и тому же адресу. Даже если вы начнёте использовать QWORD или приведёте к допустимому значение адреса типа DWORD, вы всё равно, как правило, будете получать мусор, и в этом случае вам повезёт, либо иное допустимое значение и получите результат далёкий от ожидаемого, либо ваша программа предпримет попытку чтения данных вне пределов выделенного ей диапазона, за что и будет наказана.
DWORD - это 32-битное целое. А 11-значное 16-ричное число 0x18294228f6c требует для своей записи 42 бита. В DWORD твоя константа никак не влезет. Необходимо либо использовать число, влезающее в 32 бита, либо использовать переменную life длиной 64 бита.
dword life = 0x18294228f6c; // dword 0 .. 0xFFFFFFFF
if (life < 3000) cout << &life; // что это?
Теперь понятно, что Вы вскрыли код какой-то игровой программы и нашли в нём значение, которое приняли за уровень здоровья.
Однако, код программы вполне может быть распределён по нескольким модулям: один из них — .EXE и ещё один или несколько — .DLL. И, конечно же, после старта игры все они должны быть загружены в память.
Вот только какое место в памяти займёт каждый модуль — это невозможно предугадать. Поэтому адрес Вашей ячейки может от раза к разу блуждать. Вывод — не привязывайтесь к конкретному адресу. Если Вы всё ещё хотите модифицировать Здоровье, то придётся каждый раз вскрывать код, заново находить Здоровье и сразу вписывать новое значение. По другому — никак!!!
Я хотел ответить, но меня опередили, я проверил все ответы, и да они правильные, все как надо все правильно.
Я не знаю гуглил ли ты но нашел статейку, по гуглу.
habr.com/ru/post/93437/ я думаю должна помочь.
или еще гугл сканер памяти с++.
Может скажешь че конкретно нужно сделать сам тоже постараюсь.
может еще.
cyberforum.ru/cpp-beginners/thread1529320.html
Я пробовал в других программах, мусора не было
auto pointer = &value;
cout << "value: " << value << '\n';
cout << "address: 0x" << hex << pointer << '\n';
cout << "*pointer: " << dec << *pointer << '\n';
Мне получается нужно, чтобы программа постоянно фиксировала изменение значения здоровья.
Да и проблема в том, что адрес отвечающий за здоровье выдаёт значение - мусор и я не понимаю почёму даётся это значение.