解除引用空指针时是否保证segfault(C/C++)

Фад*_*ова 3 c c++ null

在下面的C/C++代码中

int * a = malloc(N * sizeof(int)); // suppose return value is NULL
a[2] = 1;
Run Code Online (Sandbox Code Playgroud)

在malloc返回的情况下NULL,我是否保证会发生段错误或行为不可预测?

djh*_*987 10

总之,没有.

引用维基百科:

取消引用NULL指针通常会导致尝试从未映射的内存中读取或写入 - 触发分段错误或访问冲突.这可能表示程序崩溃,或者转换为可以捕获的异常.但是,在某些情况下并非如此.例如,在x86-real模式下,地址0000:0000是可读的并且通常是可写的,因此解除引用空指针是完全有效但通常不需要的操作,可能导致应用程序中的未定义但非崩溃的行为.还要注意,有时解除引用NULL是有意的并且定义良好; 例如,用C语言编写的用于16位实模式x86设备的BIOS代码可以通过取消引用用于写入的NULL指针将IDT写入机器的物理地址0.编译器也可以优化掉NULL指针取消引用,避免分段错误但引起其他不希望的行为 ......

在C中,取消引用空指针的行为是未定义的.

另请查看这个解除引用的null类指针的例子,但它仍然可以正常工作.

基本上,不要这样做,但后来你知道:)


dbu*_*ush 5

段错误是不是由C标准保证。

取消引用无效的指针会调用未定义的行为