将指针转换为 std::uint64_t 并再次返回指针时出现内存问题

问题描述 投票:0回答:0

代码如下所示

struct tNode
{
    int data;
    tNode* next;
    tNode(const int& data, tNode* next = nullptr)
    {
        this->data = data;
        this->next = next;
    }
};

int main()
{
    tNode* ptr = new tNode(1);
    std::uint64_t num_ptr = reinterpret_cast<std::uint64_t>(ptr);
    delete ptr;
    auto back_to_ptr = reinterpret_cast<tNode*>(num_ptr);
    tNode* ret = back_to_ptr->next;
    std::cout << ret;
}

当我尝试使用 MSVC 编译器在 Visual Studio 2022 中进行调试时,我无法检测到任何错误。 我相信

tNode* ret = back_to_ptr->next;
应该输出有关内存访问冲突的错误信息,那么为什么上面的代码可以正常工作?

我一直在寻找将指针转换为 int 类型的问题。 使用Visual Studio 2022,我通过打断点的方式调试了上面的例子。

c++ pointers memory casting access-violation
© www.soinside.com 2019 - 2024. All rights reserved.