"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と関連する良く見られている質問

QVC++5.0とVC++6.0の違いは?

何がどう変わったんでしょうか?
なんとなく使っているだけなのでぜんぜんわかりません。

簡単にんでいいんで思いつくことを書いてもらえるだけでもうれしいです。


よろしくお願いいたします。

Aベストアンサー

MFCのバージョンが違います。MFCのリファレンスを見れば6で増えた機能が分かります。

例えばブラウザを簡単に作れるCHtmlViewは6でないと使えません。

QVC++2005 VC++6.0で使えた関数がつかえない?(たとえば、GetModuleFileNameとか、、)

VC++超超初心者です。

いままであったVC++6.0で利用できていた、VC++2005で
GetModuleFileNameができなくなりました。
(利用できないことなんて、ないと思いますが、、、)

何か宣言とかinclude文とか必要なのでしょうか。

すみませんが、よろしくお願いします。

Aベストアンサー

VC++2005無料版にはPlatformSDKが別になっているのでそのままでは使えません
別にPlatformSDKをインストールしてVC++2005の設定を変える必要があります
VC++2008では無料版にもSDKが付属しています

Q【VC++6.0(MFC)】スタックメモリサイズの変更方法

いつも大変お世話になっております。
VC++初心者です。

スタックメモリサイズがデフォルトで1Mが設定されているようですが、
それを確認、及び、変更する方法を教えていただけませんでしょうか。
(具体的には、1.0Mから0.5Mにしたいです。)

ちなみに、某サイトで
「プロジェクトのプロパティ→リンカ→システム→スタックのサイズの設定」
で変更可能であるとあったのですが、「プロジェクトのプロパティ」が何を指すのか分かりませんでした。
お手数ですが、よろしくお願いします。

Aベストアンサー

それはおそらくVS2002以降の場合ですね。
VC++6.0では、プロジェクト(メニュー)→設定→リンク(タブ)→アウトプット(ドロップダウンリストボックス)→スタックアロケーション→予約がスタックサイズです。
Debug、Release個別に設定できますので注意してください。

リンカのデフォルト値が使われるので、1MBかどうかの確認はできません。
ですが、普通にVC++のリンカを使っていれば1MBです。
http://msdn.microsoft.com/ja-jp/library/8cxs58a6.aspx

Qvc++6.0 と vc++2500

vc++6.0で

ifstream ifs("userkey.dat");
ifs.getline(oc_user1, 63);

となっていてコンパイルできていたのですが

2005にしたら
コンパイルできません
どうしたらコンパイルできますか

6.0と2005の違いを知るには何を読んだらいいでしょうか?

Aベストアンサー

std::ifstream ifs("userkey.dat");
ifs.getline(oc_user1, 63);

としてみてはいかがでしょうか。

QVC++6.0からVC++.NET2005へ移植

VC++6.0で作成したプログラムをVC++.NET2005に移植しました。
ビルドを行うと『fatal error LNK1104:ファイル'mfc42.lib'を開くことができません。』のエラーが出てしまいます。
ソリューションのプロパティを見てもどこで「mfc42.lib」の参照を定義しているのか分かりません。
どこで「mfc42.lib」の参照を定義しているのか教えてください。また、対策を教えてください。

Aベストアンサー

VC++.NET2005のエディションをお教えください。
Express Editionでは、リソースエディタがない、
ATL, MFCが使えないなどの制限がいくつか存在します。

また、VC2005などでは.NET Frameworkの開発が前提となっており
WIN32APIを使用する場合などについては、Platform SDKを
インストールする必要があります。


人気Q&Aランキング

おすすめ情報