在下面的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类指针的例子,但它仍然可以正常工作.
基本上,不要这样做,但后来你知道:)
| 归档时间: |
|
| 查看次数: |
1958 次 |
| 最近记录: |