这会导致分段错误消息吗?

时间:2015-02-17 04:08:54

标签: c segmentation-fault initialization

如果我有以下代码,是否会导致分段错误?

 #include <stdio.h>
 #include <stdlib.h> 

int main() {
    int i;
    int n = 30;

    while(i < n) {
            printf("%d ", i);
            if(i % 3 == 0) {  
            n--;
            } else {
            n = n -2;
            }
   i = i + 2;

    }
return 0;
}

当我运行它时,我没有得到任何分段错误,但我也没有得到任何输出。我们总是假设整数i可以是内存中的任何数字吗?我明白它不会被初始化为0,对吗?

2 个答案:

答案 0 :(得分:2)

是对于局部变量(在堆栈中分配,值未定义) 见答案:What happens to a declared, uninitialized variable in C? Does it have a value?

如果“int i”在main之外声明(作为全局或静态变量,它将为零,您的输出将如下所示 “0 2 4 6 8 10 12 14 16”

所以这段代码不太可能导致seg错误,尽管编译器可以选择崩溃。但是你并没有真正访问超出范围的内存,只是堆栈上的一些值。在我是指针的情况下,你试图取消引用它,那么它很可能会导致seg错误。

答案 1 :(得分:1)

  

当我运行它时,我没有得到任何分段错误,但我也没有   得到任何输出。我们总是假设我可能是整数   那段时间内存中的任何数字?

i的值是不确定的。因此,使用未初始化的变量会导致未定义的行为。因为未定义的行为可能会导致崩溃。是的i的值可以是任何

  

我明白它不会被初始化为0,对吗?

是的,未初始化的变量是一个未初始化的变量,在您明确设置之前它没有任何有保证的值。 (有一些例外,例如全局/静态,它们被逐渐推广为0)

以下链接可能有所帮助: (Why) is using an uninitialized variable undefined behavior?