c++ 将int * 赋给返回分段错误的int [已关闭]

sulc1iza  于 2023-01-06  发布在  其他
关注(0)|答案(2)|浏览(115)

这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
2天前关闭。
Improve this question

#include <iostream>

int main() {
    // Write C++ code here
    int *p = reinterpret_cast<int*>(50);
    int q = 0;
    q = *p;
    std::cout << q;

    return 0;
}

我想给int赋值一个int *。即使我正在重新解释强制转换以存储在int变量中,仍然显示分段错误。请帮助我解决这个问题

tvz2xvvm

tvz2xvvm1#

问题不在于reinterpret_cast,而在于这一行:

q = *p;

你在这里尝试解引用一个地址为50的指针,这是一个无效的地址。如果你想赋值指针本身的值,你需要去掉解引用操作符*,再使用一个reinterpret_cast将指针转换回int(或者更确切地说long int)。
但我不得不同意上面的评论:您可能只是在探索reinterpret_cast是如何工作的,或者可能做错了什么(取决于您想用这段代码实现什么)。

rekjcdws

rekjcdws2#

在上面的代码中,我给指针p赋值50,但它实际上是存储为p的地址。正如@drescherjm所说,我试图访问下一行的无效地址,因此返回分段错误。
将int* 复制到int的实际答案是,

int s = 50; 
int *p = &s; 
int q = *p;

相关问题