アプリ版:「スタンプのみでお礼する」機能のリリースについて

ExitProcessの関数コールについて教えてください。

現在DirectX9.0とWindows7 64bitでプログラムを書いているのですが、WinMainを抜けた後
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\crt\src\crt0dat.c

void __cdecl __crtExitProcess (
    int status
    )
{
    __crtCorExitProcess(status);

    /*
    * Either mscoree.dll isn't loaded,
    * or CorExitProcess isn't exported from mscoree.dll,
    * or CorExitProcess returned (should never happen).
    * Just call ExitProcess.
    */

    ExitProcess(status);
}
という関数のExitProcessという関数をコールするところで
test.exe の 0x6a6b4319 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x00c86060 を読み込み中にアクセス違反が発生しました。
というエラーが出てしまいます。

少し調べたところdllが云々のような記述を見つけたのですが解決方法を見つけることができませんでした。

解決方法をご教授ください。

/**
Windows7 Ultimate 64bit
Core i7 920 2.67GHz
メモリ:12GB
HDD:1TB
Geforce9800GTX+

VisualStudio2008 AcademicEdition
*/

A 回答 (2件)

プログラムはマルチスレッド ( _beginthread、_beginthreadex、CreateThread などで、スレッドを作成 ) でしょうか?


もしマルチスレッドであるなら、子スレッドに問題 ( スタック領域のメモリ破壊等 ) があるのではないかという気がします。
    • good
    • 0

スタートアップルーチンがWinMainを呼び出す前に確保して使用し、WinMainを抜けた後にExitProcessなどが参照するメモリを破壊している可能性が高いです。



例えば「WinMainが呼ばれた時点で、ポインタなど、何らかの意味ある値が入っているグローバル変数や、グローバルな構造体変数」などが破壊されている可能性が非常に高いです。

それらは「変数」ですから、当然、動いているプロセスそのものは値を自由に変えられます。つまり「ポインタとしてアクセスした時に、メモリアクセス違反が起きるような値に書き替える事だって出来る」のです。

配列の添え字が負数になっているとか、ポインタが不正になっているか、など、メモリを破壊している部分が無いか、確かめてみましょう。
    • good
    • 0

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