c-这可能会导致分段错误消息



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

 #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,对吗?

局部变量为是(在堆栈中分配,值未定义)请参阅答案:C中已声明、未初始化的变量会发生什么?它有价值吗?

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

因此,这段代码不太可能导致seg错误,尽管编译器可以选择崩溃。但您并不是真正访问越界内存,只是访问堆栈上的一些值。如果我是一个指针,而你试图取消引用它,那么它很可能会导致seg错误。

当我运行它时,我没有得到任何分割错误,但我也没有获取任何输出。我们总是假设整数i可以是那段时间内存里有数字吗?

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

我知道它不会初始化为0,对吗?

是的,一个未序列化的变量就是一个未实例化的变量——除非你明确地设置它,否则它没有任何确定的值。(有一些例外,如初始化为0的全局/静态)

以下链接可能会有所帮助:(为什么)正在使用未初始化的变量未定义的行为?

相关内容

  • 没有找到相关文章

最新更新