我尝试使用perror函数时为什么程序崩溃了?

时间:2012-02-16 17:46:41

标签: c

我在C中测试perror函数,并根据this page在传递空指针时打印一条默认消息:

int main(void)
{
    int *p;
    perror(p); //crashes
}

3 个答案:

答案 0 :(得分:5)

原因int* p包含随机/垃圾值。

它不是NULL指针。您需要使用p = NULL;显式初始化它。

使用未初始化的变量是未定义的行为。

main()也需要return 0;

答案 1 :(得分:1)

因为p未在C中自动初始化为0(这不是Java)。

int *p = 0;

答案 2 :(得分:1)

将无效指针传递给perror是未定义的行为。

  

(C99,7.1.4p1)“以下每个陈述均适用,除非在下面的详细说明中另有明确说明:如果函数的参数具有无效值(例如函数域外的值,或者指针在程序的地址空间之外,或者是空指针,或指向不可修改的存储器时的对应   参数不是const限定的)或函数不期望的类型(提升后)   对于可变数量的参数,行为是未定义的。“