Már*_*ldi 5 c++ undefined-behavior language-lawyer invalid-pointer
简而言之,以下代码是否被认为具有未定义的行为?
int main()
{
int *p = <some invalid pointer value>;
}
Run Code Online (Sandbox Code Playgroud)
有关编译示例,请使用以下代码:
int main()
{
int *p = new int;
delete p; // Now p has an invalid pointer value.
int *q = p; // UB?
}
Run Code Online (Sandbox Code Playgroud)
我对这个主题做了一些研究,所以这些是我到目前为止发现的相关信息:
指针值(根据cppreference)可以是以下之一:
另外,根据cppreference,
通过无效指针值间接并将无效指针值传递给释放函数具有未定义的行为.无效指针值的任何其他使用都具有实现定义的行为.
该线程解决了无效指针的一些用途.具体而言,这个答案提到了基本原理文件(C99),其中有以下段落(第6.3.2.3节):
无论如何创建无效指针,任何使用它都会产生未定义的行为.甚至赋值,与空指针常量的比较或与自身的比较,在某些系统上可能会导致异常.
我不确定C++的状态是什么,但我认为,鉴于链接线程的答案,使用无效指针会导致未定义的行为.但请注意,该分配与初始化不同,因此我不确定初始化是否被视为一种用法.
| 归档时间: |
|
| 查看次数: |
224 次 |
| 最近记录: |