代码 1:
int n;
int c[n];
scanf("%d",&n);
代码 2:
int n;
scanf("%d",&n);
int c[n];
第一个给出分段错误,但第二个工作正常。
由于两个代码段都使用未初始化的变量,因此它们会调用未定义的行为(更不用说您正在传入一个int
应该传入 . 的地方int*
。对于未定义的行为,编译器不保证会发生什么。它可能会崩溃,如第一种情况,第二种情况不出错,不然就让恶魔飞出你的鼻子。
发生的情况是,在一种情况下n
,有一个值恰好设置为可写地址,而在另一种情况下则没有。
int n; // n is uninitialized
int c[n]; // you're trying to declare an aray with an uninitialized value