Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ '0x2'是C+中的空指针+;?_C++_Pointers_Segmentation Fault - Fatal编程技术网

C++ '0x2'是C+中的空指针+;?

C++ '0x2'是C+中的空指针+;?,c++,pointers,segmentation-fault,C++,Pointers,Segmentation Fault,在以下代码中: int* p = (int*)0x2; *p = 1; 此代码导致分段错误。但是: int* p = (int*)0x2; cout << (p == nullptr); int*p=(int*)0x2; cout您可以在除null以外的其他地址上获得分段错误。这只意味着你正在尝试访问操作系统从你的程序中保留的内存。例如,早期地址可能用于启动过程等 另请参见您可以在除null以外的其他地址上获得分段错误。这只意味着你正在尝试访问操作系统从你的程序中保留的内存。例如

在以下代码中:

int* p = (int*)0x2;
*p = 1;
此代码导致分段错误。但是:

int* p = (int*)0x2;
cout << (p == nullptr);
int*p=(int*)0x2;

cout您可以在除null以外的其他地址上获得分段错误。这只意味着你正在尝试访问操作系统从你的程序中保留的内存。例如,早期地址可能用于启动过程等


另请参见

您可以在除null以外的其他地址上获得分段错误。这只意味着你正在尝试访问操作系统从你的程序中保留的内存。例如,早期地址可能用于启动过程等


另请参见唯一可转换为
std::nullptr
的整数值为0

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

“处理”类似
0x2
的情况的方法是以某种方式构造程序,以确保
0x2
是有效的内存地址。单靠地址往往是不够的。很难保证在大型代码库中没有悬空指针,但是通过智能地使用智能指针和引用,我们可以设计一个非常安全的程序。通常,您可以通过传递值来逃脱惩罚

除了0x2之外,还有哪些地址会因为取消引用指向它们的指针而导致分段错误?为什么


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

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

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

“处理”类似
0x2
的情况的方法是以某种方式构造程序,以确保
0x2
是有效的内存地址。单靠地址往往是不够的。很难保证在大型代码库中没有悬空指针,但是通过智能地使用智能指针和引用,我们可以设计一个非常安全的程序。通常,您可以通过传递值来逃脱惩罚

除了0x2之外,还有哪些地址会因为取消引用指向它们的指针而导致分段错误?为什么

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

指向地址0x2的指针是否真的是空指针(导致分段错误)

不,输出
0
证明它不是空指针

如何处理像0x2 by if语句这样的情况?(我的意思是,处理取消引用会导致分段错误的情况。因为正如您在if(p==nullptr)中看到的,这个情况没有得到处理)

你不能。没有允许您的程序使用的所有地址的列表

除了0x2之外,还有哪些地址会因为取消引用指向它们的指针而导致分段错误?为什么

操作系统未分配给程序的所有地址。同时,写入属于您的程序的某些地址将导致未定义的行为,如崩溃

要么知道硬件之类的特殊地址,要么分配内存并获得相应的地址

指向地址0x2的指针是否真的是空指针(导致分段错误)

不,输出
0
证明它不是空指针

如何处理像0x2 by if语句这样的情况?(我的意思是,处理取消引用会导致分段错误的情况。因为正如您在if(p==nullptr)中看到的,这个情况没有得到处理)

你不能。没有允许您的程序使用的所有地址的列表

除了0x2之外,还有哪些地址会因为取消引用指向它们的指针而导致分段错误?为什么

操作系统未分配给程序的所有地址。同时,写入属于您的程序的某些地址将导致未定义的行为,如崩溃

要么知道硬件之类的特殊地址,要么分配内存并获得相应的地址

指向地址0x2的指针真的是空指针吗

0x2不是空指针常量

但是,null的未指定。理论上,可能是2。但在大多数系统上,它是0。您显示的输出表明null在您的系统上没有值2

(哪个会导致分段错误)

通过null间接寻址并不是导致segfault的唯一原因

如何处理像0x2 by if语句这样的情况?(我的意思是,处理取消引用会导致分段错误的情况

通过从不尝试通过无效指针进行间接操作来“处理”它们。无法根据指针的值来确定指针是否有效(除非我们知道null永远无效)

除了0x2之外,还有哪些地址会因为取消引用指向它们的指针而导致分段错误?为什么

<>从C++的视角:访问任何对象在其生命周期之外都会导致程序的行为不被定义。如果没有地址X的对象,则访问*x是未定义的行为,除非另有说明。对象是通过定义变量创建的,并且使用<代码>新< /COD>表达式。< /P> 从操作系统的角度来看,这些东西会导致segfault:所有地址都没有映射到任何内存。所有写入操作都会写入只读内存。