这会导致分段错误消息吗?
Could this ever cause a segmentation error message?
如果我有下面的代码,会不会导致分段错误?
#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,对吗?
When I ran it, I don't get any segmentation errors but I also don't
get any output. And are we always to assume that integer i could be
any number in memory during that time?
i
的值不确定。所以使用未初始化的变量会导致 undefined behavior.So 有可能因为未定义的行为而导致崩溃。是的 i
的值可以是任何值
I understand that it will not be initialized to 0, correct?
是的,一个未初始化的变量是一个未初始化的变量,在您明确设置它之前它没有任何确定的值。 (有像 global/static 这样的异常被初始化为 0)
以下 link 可能有所帮助:
(Why) is using an uninitialized variable undefined behavior?
局部变量是(在栈中分配,值未定义)
查看答案: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”
所以这段代码不太可能导致段错误,尽管编译器可以选择崩溃。但是您并没有真正访问越界内存,只是堆栈上的一些值。如果 i 是一个指针,而你试图取消引用它,那么它很可能会导致段错误。
如果我有下面的代码,会不会导致分段错误?
#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,对吗?
When I ran it, I don't get any segmentation errors but I also don't get any output. And are we always to assume that integer i could be any number in memory during that time?
i
的值不确定。所以使用未初始化的变量会导致 undefined behavior.So 有可能因为未定义的行为而导致崩溃。是的 i
的值可以是任何值
I understand that it will not be initialized to 0, correct?
是的,一个未初始化的变量是一个未初始化的变量,在您明确设置它之前它没有任何确定的值。 (有像 global/static 这样的异常被初始化为 0)
以下 link 可能有所帮助: (Why) is using an uninitialized variable undefined behavior?
局部变量是(在栈中分配,值未定义) 查看答案: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”
所以这段代码不太可能导致段错误,尽管编译器可以选择崩溃。但是您并没有真正访问越界内存,只是堆栈上的一些值。如果 i 是一个指针,而你试图取消引用它,那么它很可能会导致段错误。