Вы конвертируете указатель в int
в unsigned int
.
Проблема в том, что unsigned int
слишком мало, чтобы содержать все возможные значения указателя на int
.
Вы можете попробовать unsigned long long
, которого должно быть достаточно
(unsigned long long)&temp;
Вы можете проверить размерность типа с помощью sizeof()
, который возвращает количество байтов типа / переменной
С моей платформой (Linux amd64) из
std::cout << sizeof(&temp) << std::endl;
std::cout << sizeof(unsigned) << std::endl;
я получаю 8
(для sizeof(&temp)
) и 4
(для sizeof(long)
).
И, очевидно, 4-байтовая переменная не может представлять все возможные значения 8-байтовой переменной.
С другой платформы вы можете получить другие значения.