最新閲覧日:

"0x00402108"の命令が"0x00000000"のメモリを参照しました。メモリが"written"になることはできませんでした。
という、アプリケーションエラーが出るのですが、どのような問題があるのでしょうか?
環境は、win2000です。VC++6.0SE

A 回答 (2件)

#1の最終段ですが、Debugビルドすると、ローカル変数(正確にはauto変数)は0xCCCCCCCCに初期化されます。

Releaseビルドすると初期化されず初期値は不定です。

#alloc系/newや何かの情報を返す関数の復帰値を確認していないとか?

void func()
{
char *p = (char *)malloc(4); // エラーになってNULL(=0)を返す
strcpy(p, "ABC"); // この先でエラーが起きる
}
    • good
    • 0

最初の 0x00402108 は、実行しているプログラムのアドレスです。


0x00000000 のメモリを参照しました... のくだりは、アドレスが 0 に
書き込みをしようとしたということです。

例えば、(極端な例ですが)こんなことをすると同じエラーが出ます。

int main()
{
  int* data;
  data = (int*)0;
  *data = 1;

  return 0;
}

ポインタ変数の初期化をしていない場合にこういうエラーが出ます。

多分、Debug でビルドしたプログラムなのだと思います。Debug で
ビルドした場合には、自動変数は0で初期化されますので、
明示的にポインタ変数の初期化(アドレスの指定)をしないと、
こういうはめになります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード


このカテゴリの人気Q&Aランキング

おすすめ情報

カテゴリ