gpt4 book ai didi

c++ - `0x2` 是 C++ 中的空指针吗?

转载 作者:行者123 更新时间:2023-12-01 15:08:04 26 4
gpt4 key购买 nike

在以下代码中:

int* p = (int*)0x2;
*p = 1;

此代码导致段错误。但:
int* p = (int*)0x2;
cout << (p == nullptr);

输出为 0 .所以:
  • 是指向地址0x2的指针真的是空指针(导致段错误)?
  • 如何处理 0x2 等案例通过 if 语句? (我的意思是,处理取消引用会导致段错误的情况。因为正如您在 if (p == nullptr) 中看到的那样,这种情况没有得到处理)。
  • 0x2 以外的地址是什么?哪个取消引用指向它们的指针会导致段错误,为什么?
  • 最佳答案

    唯一可转换为 std::nullptr 的整数值为 0。

    是否0x2是否是有效的内存地址取决于您的程序。如果您只是将此内存位置别名为 int* ,这是未定义的行为,您很幸运遇到了段错误。

    您“处理” 0x2 等案件的方式是以某种方式构建您的程序,以保证 0x2是一个有效的内存地址。仅仅地址通常是不够的。在大型代码库中很难保证没有悬空指针,但是通过智能地使用智能指针和引用,我们可以设计一个非常安全的程序。通常,您可以通过值(value)传递而侥幸逃脱。

    What are addresses other than 0x2 which dereferencing a pointer pointing to them causes a Segmentation Fault and why?



    他们都是。这取决于您的程序(以及您的操作系统)。您不能只将随机内存位置解释为整数然后使用它们。除其他外,这肯定会违反 strict aliasing rule

    关于c++ - `0x2` 是 C++ 中的空指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61119907/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com