ami*_*ali 1 c++ pointers segmentation-fault
在以下代码中:
int* p = (int*)0x2;
*p = 1;
Run Code Online (Sandbox Code Playgroud)
此代码导致分段错误。但:
int* p = (int*)0x2;
cout << (p == nullptr);
Run Code Online (Sandbox Code Playgroud)
输出是0。所以:
0x2真的是空指针(这会导致分段错误)?0x2if 语句之类的情况?(我的意思是,处理取消引用会导致分段错误的情况。因为在if (p == nullptr)这种情况下没有处理)。0x2取消引用指向它们的指针会导致分段错误之外,还有哪些地址?为什么?唯一可转换std::nullptr为 0 的整数值。
是否0x2是有效的内存地址取决于您的程序。如果您只是将此内存位置别名为 an int*,则这是未定义的行为,您很幸运会遇到分段错误。
您“处理”这种情况的0x2方式是以某种方式构建您的程序,以保证这0x2是一个有效的内存地址。仅靠地址通常是不够的。在大型代码库中很难保证没有悬空指针,但是通过智能地使用智能指针和引用,我们可以设计一个非常安全的程序。通常,您可以通过传递值而逃脱。
除 0x2 之外的哪些地址取消引用指向它们的指针会导致分段错误,为什么?
他们都。这取决于您的程序(以及您的操作系统)。您不能只是将随机内存位置解释为整数然后使用它们。除此之外,这肯定会违反严格的别名规则