%x
ожидает без знака.То, что вы печатаете, является указателем.Чтобы сделать это правильно, вы обычно хотите использовать %p
.Чтобы быть педантично правильным, он ожидает указатель на void, поэтому вам нужно привести его:
printf("%p\n", (void *)val);
В действительности большинство современных реализаций используют один и тот же формат для всех указателей, и в этом случае приведение будетбыть пустымКонечно, учитывая тег C ++, большая часть кода, который вы включили, становится в лучшем случае сомнительной (кроме таких частей, как LPSOMESTRUCT, которые сомнительны независимо).В C ++ обычно требуется что-то более похожее на:
struct somestruct {
int a;
int b;
};
somestruct *val = new somestruct; // even this is questionable.
std::cout << val;