我去接受采访时被问到以下问题:
您如何看待以下内容?
int i; scanf ("%d", i); printf ("i: %d\n", i);
我回答了:
我的回答是错误的。我不知所措。
之后,他们解雇了我:
在某些情况下,该程序将崩溃并导致核心转储。
我不明白为什么程序会崩溃?谁能解释我的原因?任何帮助表示赞赏。
定义变量后,编译器会为该变量分配内存。
int i; // The compiler will allocate sizeof(int) bytes for i
i
上面定义的未初始化,并且具有不确定的值。
要将数据写入分配给的内存位置i
,您需要指定变量的地址。该声明
scanf("%d", &i);
用户会将int
数据写入为分配的内存位置i
。
如果&
未放置在前面i
,scanf
则将尝试将输入数据i
而不是写入存储位置&i
。由于i
包含不确定的值,因此有可能包含与存储地址相同的值,或者包含超出存储地址范围的值。
在这两种情况下,程序都可能会出现异常行为,并导致未定义的行为。在这种情况下,可能会发生任何事情。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句