gpt4 book ai didi

c - 评估包含未初始化指针的条件 - IN,但它会崩溃吗?

转载 作者:行者123 更新时间:2023-12-02 08:35:13 24 4
gpt4 key购买 nike

我在论坛的某个地方遇到过这个:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com