• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:メモリの初期値)

C言語ポインタにおける配列初期値の不可解な事象

このQ&Aのポイント
  • C言語の勉強をしている者が、配列の初期値に関する不可解な事象について質問しています。
  • 配列[0]に初期化していないint型の配列の値を確認すると、意図しない数値が入っていることに疑問を持っています。
  • 配列を再度作成して初期化した後も、配列[0]には同じ不可解な数字が入っていることに戸惑っています。なぜこのような値が初期化されるのか、理由を知りたいとしています。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

-858993460を16進表記するとCCCCCCCCになります。 参考URLに示したwikipediaの記事によれば、Microsoft Visual C++のディバグルーチンが 初期化されていないスタックメモリーにこの値を設定しているとのことです。

参考URL:
http://en.wikipedia.org/wiki/Magic_number_(programming)
JoyWorld
質問者

お礼

よくこんなの知ってますね! 実はVisualStudioです。 なるほどーゲイツが勝手にやっていたんですね これで解決しました ありがとうございます

その他の回答 (3)

  • ok-kaneto
  • ベストアンサー率39% (1798/4531)
回答No.4

変数の初期値は「不定」なので定まっていません。 実行するたびに変わっているかもしれませんので、「たまたま」でしょう。 処理系によっては、不定値へアクセスすると異常終了することもありますしね。 ちなみにこの値は16進数にすると「FFFFFFFFCCCCCCCC」ですね。なにか規則的なものを感じます。 >一度0に初期化したのなら次は0のままになっている 処理系によるでしょう。確保されたメモリを開放した場合、別の値で書き換えられているかもしれません。どちらにせよ、「不定」です。

JoyWorld
質問者

お礼

回答ありがとうございました。

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.2

そのソースを見せてください。 >もう一度配列を作り どうやって配列を作ったのですか? 動的に作成したら初期化しないと値はでたれラメですし、静的でも初期値を指定しない限り値はでたらめです。 >さらにもう一度配列を作り、 同じところに配列ができることはありませんので。

JoyWorld
質問者

お礼

回答ありがとうございました

JoyWorld
質問者

補足

下の方の補足にプログラムと結果を書きました。 同じところに配列ができていないのでしょうか??

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

静的でなければ「初期化しないときに入っている値」については誰も何も保証していない. これ以上は具体的なプログラムや環境が明示されなければ言いようもない.

JoyWorld
質問者

お礼

回答ありがとうございました

JoyWorld
質問者

補足

プログラム以下になります #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

関連するQ&A