作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在论坛的某个地方遇到过这个:
Any attempt to evaluate an uninitialized pointer variable
invokes undefined behavior. For example:
int *ptr; /* uninitialized */
if (ptr == NULL) ...; /* undefined behavior */
这里是什么意思?这是否意味着如果我只写:
if(ptr==NULL){int t;};
这个声明已经是UB了?为什么?我不是在取消引用指针吗?(我注意到可能存在术语问题,在这种情况下是 UB,我指的是:Will my code crash JUST due to the if check?)
最佳答案
使用未初始化的变量会调用未定义的行为。是不是指针并不重要。
int i;
int j = 7 * i;
也是未定义的。请注意,“未定义”意味着任何事情都可能发生,包括它按预期工作的可能性。
在你的情况下:
int *ptr;
if (ptr == NULL) { int i = 0; /* this line does nothing at all */ }
ptr
可能包含任何内容,它可以是一些随机垃圾,但也可以是 NULL
。这段代码很可能不会崩溃,因为您只是将 ptr
的值与 NULL
进行比较。我们不知道执行是否进入条件主体,我们甚至不能确定某些值是否会被成功读取 - 因此,行为未定义.
关于c - 评估包含未初始化指针的条件 - IN,但它会崩溃吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22465371/
我是一名优秀的程序员,十分优秀!