未初始化时检查指针是否为空

时间:2013-02-05 22:28:21

标签: c

如果变量未初始化,假设if语句将始终有效是否安全?假设是肯定的,但我被告知变量中的随机垃圾位并不总是意味着检查null是否有效。

Void afunction () {
    char* someStr;
    if (someStr) 
    {
        // do something
    }
}

4 个答案:

答案 0 :(得分:8)

  

如果变量未初始化,可以假设if语句总是有效吗?

没有。读取未初始化的存储会调用未定义的行为。您无法对此代码做出安全假设。

不要这样做!

答案 1 :(得分:5)

绝对不能保证始终有效。你必须自己初始化它。

char* someStr = NULL;

或其他一些价值。

答案 2 :(得分:2)

未初始化的变量是不确定的。在分配值之前读取它们会导致未定义的行为。

检查指针是否为NULL

非常容易
if (someStr) {
   // Don't use it (or do for some weird reason)
}

为了安全起见并确保指针是您想要的值,我会在初始化时为其赋值。

char* someStr = NULL;

您还可以将指针设置为静态以避免未定义的行为。

static char* someStr;

答案 3 :(得分:1)

未定义someStr的值。通常,它将被设置为堆栈周围的一些旧值。所以,它可能是NULL(即0)。