-4

代码 1:

int n;
int c[n];
scanf("%d",&n);

代码 2:

int n;
scanf("%d",&n);
int c[n];

第一个给出分段错误,但第二个工作正常。

4

2 回答 2

2

由于两个代码段都使用未初始化的变量,因此它们会调用未定义的行为(更不用说您正在传入一个int应该传入 . 的地方int*。对于未定义的行为,编译器不保证会发生什么。它可能会崩溃,如第一种情况,第二种情况不出错,不然就让恶魔飞出你的鼻子

发生的情况是,在一种情况下n,有一个值恰好设置为可写地址,而在另一种情况下则没有。

于 2013-04-26T18:06:45.877 回答
0
int n;     // n is uninitialized
int c[n];  // you're trying to declare an aray with an uninitialized value
于 2013-04-26T18:04:31.560 回答