私は少し混乱しています。私の知る限り、Cでintを初期化せずに宣言すると、たとえば次のようになります。int x;
したがって、その値は不定です。したがって、それを使用しようとすると、または未定義の動作が必要になります。
したがって、VS2010 で次のコードを実行すると、プログラムがクラッシュします。
int main(){
int a;
printf("%d\n",a);
return 0;
}
次のコードを見てみましょう。このコードは警告を表示せず、クラッシュもしません(なぜ?)
void foo(int *var_handle){
// do nothing
}
int main(){
int a;
foo(&a);
printf("%d\n",a); // works, prints some big value
return 0;
}
これの振る舞いを説明できますか?まったく何もしない関数への呼び出しを追加しただけですが、プログラムがクラッシュしなくなりました。