• ベストアンサー
  • 困ってます

メモリの初期値

  • 質問No.6400399
  • 閲覧数1400
  • ありがとう数4
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 9% (30/319)

C言語の勉強をしている者です。
やっとこさポインタのところまでやってきまして、いろいろ試しているところなのですが、不可解な事が起こったので質問させてください。

int型の配列を作って、初期化しないままその配列[0]に入っている値を覗くと
-858993460
という値が入っていました。

もう一度配列を作り、メモリのアドレスを確認すると、前に作った配列とポインタのアドレスが同じだったので
そこに0を入れました。
当たり前ですが配列[0]の値は0でした。

さらにもう一度配列を作り、[0]のアドレスの中身を覗くと
-858993460
という値に戻っていました

※配列[0]のアドレスは常に一緒です。

なぜこんな訳のわからない数字( -858993460 )に初期化されているんでしょうか
一度0に初期化したのなら次は0のままになっていると予測していたのですが、どうなっているんでしょうか
どなたか理由のわかる方いませんか

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

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

ベストアンサー率 50% (45/90)

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

お礼率 9% (30/319)

よくこんなの知ってますね!
実はVisualStudioです。
なるほどーゲイツが勝手にやっていたんですね
これで解決しました
ありがとうございます
投稿日時:2010/12/22 14:51

その他の回答 (全3件)

  • 回答No.4

ベストアンサー率 39% (1797/4530)

変数の初期値は「不定」なので定まっていません。
実行するたびに変わっているかもしれませんので、「たまたま」でしょう。
処理系によっては、不定値へアクセスすると異常終了することもありますしね。

ちなみにこの値は16進数にすると「FFFFFFFFCCCCCCCC」ですね。なにか規則的なものを感じます。

>一度0に初期化したのなら次は0のままになっている
処理系によるでしょう。確保されたメモリを開放した場合、別の値で書き換えられているかもしれません。どちらにせよ、「不定」です。
お礼コメント
JoyWorld

お礼率 9% (30/319)

回答ありがとうございました。
投稿日時:2010/12/22 14:51
  • 回答No.2

ベストアンサー率 24% (755/3136)

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

>さらにもう一度配列を作り、
同じところに配列ができることはありませんので。
補足コメント
JoyWorld

お礼率 9% (30/319)

下の方の補足にプログラムと結果を書きました。
同じところに配列ができていないのでしょうか??
投稿日時:2010/12/22 14:42
お礼コメント
JoyWorld

お礼率 9% (30/319)

回答ありがとうございました
投稿日時:2010/12/22 14:52
  • 回答No.1

ベストアンサー率 23% (3656/15482)

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

お礼率 9% (30/319)

プログラム以下になります

#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
投稿日時:2010/12/22 14:39
お礼コメント
JoyWorld

お礼率 9% (30/319)

回答ありがとうございました
投稿日時:2010/12/22 14:52
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ