- ベストアンサー
C言語ポインタにおける配列初期値の不可解な事象
- C言語の勉強をしている者が、配列の初期値に関する不可解な事象について質問しています。
- 配列[0]に初期化していないint型の配列の値を確認すると、意図しない数値が入っていることに疑問を持っています。
- 配列を再度作成して初期化した後も、配列[0]には同じ不可解な数字が入っていることに戸惑っています。なぜこのような値が初期化されるのか、理由を知りたいとしています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
-858993460を16進表記するとCCCCCCCCになります。 参考URLに示したwikipediaの記事によれば、Microsoft Visual C++のディバグルーチンが 初期化されていないスタックメモリーにこの値を設定しているとのことです。
その他の回答 (3)
- ok-kaneto
- ベストアンサー率39% (1798/4531)
変数の初期値は「不定」なので定まっていません。 実行するたびに変わっているかもしれませんので、「たまたま」でしょう。 処理系によっては、不定値へアクセスすると異常終了することもありますしね。 ちなみにこの値は16進数にすると「FFFFFFFFCCCCCCCC」ですね。なにか規則的なものを感じます。 >一度0に初期化したのなら次は0のままになっている 処理系によるでしょう。確保されたメモリを開放した場合、別の値で書き換えられているかもしれません。どちらにせよ、「不定」です。
お礼
回答ありがとうございました。
- SaKaKashi
- ベストアンサー率24% (755/3136)
そのソースを見せてください。 >もう一度配列を作り どうやって配列を作ったのですか? 動的に作成したら初期化しないと値はでたれラメですし、静的でも初期値を指定しない限り値はでたらめです。 >さらにもう一度配列を作り、 同じところに配列ができることはありませんので。
お礼
回答ありがとうございました
補足
下の方の補足にプログラムと結果を書きました。 同じところに配列ができていないのでしょうか??
- Tacosan
- ベストアンサー率23% (3656/15482)
静的でなければ「初期化しないときに入っている値」については誰も何も保証していない. これ以上は具体的なプログラムや環境が明示されなければ言いようもない.
お礼
回答ありがとうございました
補足
プログラム以下になります #include <stdio.h> int main (void) { int a[3],i; printf("%p\n%p\n%p\n",&a[0],&a[1],&a[2]); //ここでアドレスの確認 /* for(i=0;i<3;i++) { a[i] = 0; //2回目のみこの処理をします } */ printf("%d\n",a[0]); return 0; } 1回目 0012FF58 0012FF5C 0012FF60 -858993460 2回目 0012FF58 0012FF5C 0012FF60 0 3回目 0012FF58 0012FF5C 0012FF60 -858993460
お礼
よくこんなの知ってますね! 実はVisualStudioです。 なるほどーゲイツが勝手にやっていたんですね これで解決しました ありがとうございます