いつもお世話になっております。
DOSコマンドからMFCアプリケーションを起動したら、
アプリケーションエラーのダイアログが出力しました。
メッセージ文言
「"0xNNNNNNNN"の命令が"0xNNNNNNNN"のメモリを参照しました。
メモリが"written"になることはできませんでした。
プログラムを終了するには[OK]をクリックしてください」
開発環境
OS Windows XP SP2
VC++ MicroSoft Visual C++ Ver6.0 Enterprise Edition
実行環境
OS Windows Server 2003 Enterprise Edition SP2
(但しWindows Server 2000で実行したところ、上記現象は起こりませんでした。試しにWindows XP SP2(開発環境)で実行したら、上記現象は起こりました。)
条件は以下の1~5が同時に成立した場合にダイアログが出力します
1. MFCをダイナミックリンク(スタティックリンクはOKでした)
2. グローバル変数(CString型)に129桁以上を設定(128桁の場合、OKでした)
3. ローカル変数(CString型)に65桁以上を設定(64桁の場合、OKでした)
4. MFCの関数:CFile::GetStatus()をコール(第一引数のファイルは実際に存在する/しないに関わらず、エラーダイアログは出力します)
5. SDKの関数:ExitProcess()をコール
原因がわかる方がいましたら、教えて頂けませんか??
宜しくお願い致します。
実装は以下のような感じです。
//グローバル変数定義
CString g_wk; (.hではなく、.cppに直接記述してあります)
BOOL CTest01Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
//↓↓↓↓↓ここから↓↓↓↓↓
CString l_wk = "1234567…56789"; // 129桁
g_wk = "1234567…56789"; // 65桁
CFileStatus s;
BOOL bl = CFile::GetStatus("a", s);
ExitProcess(0);
//↑↑↑↑↑ここまで↑↑↑↑↑
return TRUE;
}
No.3
- 回答日時:
ExitProcessでは無くて
AfxGetApp()->GetMainWnd()->SendMessage( WM_CLOSE, 0, 0 );
など正規の手順で落としてみましょう
何度もご回答ありがとうございます。
ご提示された実装でエラーウィンドウは出なくなりました。
ただ、「EndDialog()」でもエラーウィンドウは出ないのですが、
これだとまずいのでしょうか???
No.2
- 回答日時:
アサーションはGatStateの中なのでしょうか?
VC6のリモートデバッグで実行してみて ソース行を特定してみてはいかがでしょう
WinXP側のプロジェクトフォルダーを共有して
ここにMFC42.DLL,MFC42D.dll,MFCO42.DLL,MSVCRTD.DLLをコピーします
リモートデバック用にVC6のインストールフォルダのCommon\MSDev98\BinからMSVCMON.EXE,DM.DLL,TLN0T.DLL,MSDID110.DLLをコピーします
Win2003側で XPのフォルダーにネットワークドライブを割り当てます
仮に Z:などと
VC6の プロジェクト > 設定 > デバッグタブ
プログラムの引数に /C デバッグ対象アプリ
リモートの実行可能ファイルのパスとファイル名に
C:\Windows\System32\cmd.exe
を設定
ビルド > デバッガリモート接続 > 接続(C)をリモート > 設定 > Win2003のIPアドレスまたはサーバー名 > OK
Win2003側で MSVCMON.EXEを起動 > 接続
VC6側で 適当なブレークポイント設定 > F5(実行)
BOOL bl = CFile::GetState("a", s );
までステップ実行 > その後ステップインで MFCの中へ入れると思いますよ
当方のVC6は SP5か6です ・・・
ご回答ありがとうございます。
都合によりWin2003が使えなかったので、
WinXP(開発環境)にてデバッグモードで実施してみました。
(Visual Studioより起動)
GetState()はあまり問題ないように感じました。
(元々,「a」というファイルは存在しないのでFindFirstFile()の戻り値がINVALID_HANDLE_VALUEの為、FALSEを返却してるようです)
ただ、実行後に以下のメッセージが出力しました。
Detected memory leaks!
Dumping objects ->
strcore.cpp(118) : {69} normal block at 0x00384BF0, 78 bytes long.
Data: < A A 1234> 01 00 00 00 41 00 00 00 41 00 00 00 31 32 33 34
strcore.cpp(118) : {68} normal block at 0x00384B18, 142 bytes long.
Data: < 1234> 01 00 00 00 81 00 00 00 81 00 00 00 31 32 33 34
strcore.cpp(118) : {61} normal block at 0x003847C0, 45 bytes long.
Data: < l r> 01 00 00 00 0F 00 00 00 20 00 00 00 82 6C 82 72
{60} normal block at 0x00384768, 16 bytes long.
Data: < > FF FF FF FF CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.
スレッド 0xF18 終了、終了コード 0 (0x0)。
_CrtSetBreakAlloc()で追跡したところ
61を指定:止まらなかったのでどのオブジェクトか不明
68を指定:l_wk(129桁)の設定でストップ
69を指定:g_wk(65桁)の設定でストップ
のようになりました。
CStringが怪しいということでしょうか??
どうもアサーションはプログラム実行後に出るようです。
(或いはExitProcess()内かもしれないです)
試しにExitProcess()をEndDialog()に変更したら
アサーションは出ませんでした。
ExitProcess()が悪いということでしょうか??
(或いはMFCとSDKの関係に何かある?)
因みにVC++はSP6を当てています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 10 explorerをedgeで開く方法 2 2022/06/05 14:59
- Windows 7 Windows7でMicrosoft VirtualPC2007 SP1を使用する 9 2022/11/17 13:12
- Excel(エクセル) Excel起動時にエラーダイアログが表示される 3 2022/07/28 19:52
- その他(Microsoft Office) Office(Windows版,Word/Excel/PowerPoint等)にログインできません 4 2022/07/24 15:18
- UNIX・Linux VirtualBox ゲストOSにPC内蔵HDDのパーティションをマウントする方法は? 2 2023/05/06 22:52
- その他(プログラミング・Web制作) Pythonの作業環境・作業フォルダの迅速な設定・指定方法 3 2022/04/01 07:55
- Windows 10 Windows Updateが動作しません 7 2022/08/12 16:26
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- その他(開発・運用・管理) Windows serverでマルチキャスト通信の確認をしたいです。MicrosoftよりMPING 1 2023/03/31 01:05
- サーバー ログオンユーザーがいない場合に自動再起動 1 2022/09/28 09:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.netを実行するとデバック プ...
-
visual studio 2008 のデバッグ...
-
VB6のデバッグ
-
ダイアログなどの文字列が文字...
-
VBのプロジェクトが開けない
-
ブレークポイントは現在の設定...
-
Eclipseのブレークポイントが○...
-
デバッグとビルドは何が違うの...
-
DLL参照時に指定されたモジュー...
-
VC++でSQL Serverに接続するに...
-
vbprojファイルが開けません
-
Visual Studio 2017 ビルドする...
-
eclipseでデバックするとエラー...
-
デバッガでステップ実行してい...
-
eclipseが使えません
-
VB6.0を使用しています
-
デバッグが選択できません。
-
Visual Studio 2010 のC#で…
-
プログラムへの画像埋め込み(?
-
ソリューションをまたがるデバ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
デバッグとビルドは何が違うの...
-
eclipseでプログラムが実行でき...
-
visual studio2019でデバッグが...
-
eclipseでデバックするとエラー...
-
デバッガでステップ実行してい...
-
Visual studio2017で、2回目の...
-
C言語での開発でエラーが出て困...
-
DLL参照時に指定されたモジュー...
-
Eclipseのブレークポイントが○...
-
VB.netを実行するとデバック プ...
-
visual studio 2008 のデバッグ...
-
ソリューションをまたがるデバ...
-
Visual Studio 2017 ビルドする...
-
Release版のexeが動きません
-
Visual C#で、usingが出来ない...
-
ブレークポイントは現在の設定...
-
vb ver6 でformat文やTrim文の...
-
VB6.0を使用しています
-
visual studio 2019 についての...
-
Visual Studio 2008 SP1について
おすすめ情報