首页 >后端开发 >C++ >C 标准中的何处取消引用定义为未定义行为的未初始化指针?

C 标准中的何处取消引用定义为未定义行为的未初始化指针?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-16 20:59:11770浏览

Where in the C   Standard is Dereferencing an Uninitialized Pointer Defined as Undefined Behavior?

确定 C 标准中取消引用未初始化指针的未定义行为

提出的问题旨在理解 C 标准中认为的特定部分将未初始化的指针取消引用为未定义的行为。虽然之前对 5.3.1/1 和 3.7.3.2/4 的引用提供了相关信息,但它们没有明确说明与使用未初始化指针相关的未定义行为。

答案就在第 4.1 节中,该节解决了左值转换问题右值(添加强调):

“左值(3.10)非函数、非数组类型 T 可以转换为右值 如果 T 是不完整类型,则需要此转换的程序是错误的(如果左值引用的对象不是该类型的对象)。 T 并且不是从 T 派生的类型的对象,或者如果该对象未初始化,则需要此转换的程序具有未定义行为。”

本节明确指出,尝试使用引用未初始化对象的左值(例如指针)将导致未定义的行为。因此,提供的代码示例:

int* ptr;
*ptr = 0;

确实表现出未定义的行为,因为指针 ptr 是在没有初始化的情况下使用的。

为了进一步研究此主题,请在 C 标准中搜索“未初始化” ” 将揭示涉及与未初始化对象相关的未定义行为的其他部分。

以上是C 标准中的何处取消引用定义为未定义行为的未初始化指针?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn