none
如果發生記憶體錯誤,應該如何是好? RRS feed

解答

  • HI,

     

    如果看不到疑似錯誤的訊息, 就只好用就要用CMemoryState類別,或是AfxCheckMemory函數來查看看了

     

    tihs

     

    2008年4月14日 上午 08:23

所有回覆

  • HI,

     

    您可以先按F5功能鍵執行程式,在程式執行結束後觀察輸出視窗有沒有記憶體錯誤的資訊,如果看不到,就要用CMemoryState類別,或是AfxCheckMemory函數來查看看了

     

    tihs

     

    2008年4月11日 上午 09:30
  • 我多寫了一行程式,記憶體錯誤的問題就不見了
    但是多出了一個更大的問題,就是按下F5之後,應該跑出的視窗不見了
    我把我的部份程式放上來,麻煩大大幫我看一下

    void PlaySound(const int&);
    IDirectMusicLoader8*  g_pLoader           = NULL;
    IDirectMusicPerformance8* g_pPerformance  = NULL;
    IDirectMusicSegment8*   g_pSegment        = NULL;

    void SetSound()
    {
        CoInitialize(NULL);
           
        CoCreateInstance(CLSID_DirectMusicLoader, NULL,
            CLSCTX_INPROC, IID_IDirectMusicLoader8,
            (void**)&g_pLoader);

        CoCreateInstance(CLSID_DirectMusicPerformance, NULL,
            CLSCTX_INPROC, IID_IDirectMusicPerformance8,
            (void**)&g_pPerformance );

        g_pPerformance->InitAudio(
            NULL,              // IDirectMusic interface not needed.
            NULL,              // IDirectSound interface not needed.
            NULL,              // Window handle.
            DMUS_APATH_SHARED_STEREOPLUSREVERB,  // Default audiopath type.
            64,                // Number of performance channels.
            DMUS_AUDIOF_ALL,   // Features on synthesizer.
            NULL               // Audio parameters; use defaults.
        );

        CHAR strPath[512];
        strcat( strPath, "\\media" );

        WCHAR wstrSearchPath[MAX_PATH + 1];
        MultiByteToWideChar( CP_ACP, 0, strPath, -1,
                wstrSearchPath, MAX_PATH );
        wstrSearchPath[MAX_PATH] = 0;

        g_pLoader->SetSearchDirectory(
            GUID_DirectMusicAllTypes, // Types of files sought.
            wstrSearchPath,           // Where to look.
            FALSE                     // Don't clear object data.
        );

        WCHAR wstrFileName[MAX_PATH] = L"a.wav";
       
        g_pLoader->LoadObjectFromFile(
            CLSID_DirectMusicSegment, // Class identifier.
            IID_IDirectMusicSegment8, // ID of desired interface.
            wstrFileName,             // Filename.
            (LPVOID*) &g_pSegment     // Pointer that receives interface.
        );

        g_pSegment->Download( g_pPerformance );
    }

    void PlaySound(const int& Num)
    {
        switch(Num)
        {
        case 0:
            g_pPerformance->PlaySegmentEx(
                g_pSegment,  // Segment to play.
                NULL,        // Not used.
                NULL,        // For transitions.
                0,           // Flags.
                0,           // Start time; 0 is immediate.
                NULL,        // Pointer that receives segment state.
                NULL,        // Object to stop.
                NULL         // Audiopath, if not default.
            );
            break;
         }
    }

    int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow)
    {
    .
    .
    .
    .
    SetSound();  <----------------------不加的話,會發生記憶體錯誤,加的話,視窗會打不開
    .
    .
    .
    }


    ---------------------------------記憶體的錯誤訊息----------------------
    於 0x00402e46 的 WebCamApp.exe 中發生未處理的例外狀況: 0xC0000005: 讀取位置 0x00000000 時發生存取違規

    ---------------------------------謝謝大大的解答-----------------------
    2008年4月12日 上午 05:44
  • HI,

     

    您按F5執行後, 有沒有到[輸出]視窗看結果?

     

    tihs

    2008年4月12日 上午 06:41
  •     g_pLoader->SetSearchDirectory(
            GUID_DirectMusicAllTypes, // Types of files sought.
            wstrSearchPath,           // Where to look.
            FALSE                     // Don't clear object data.
        );

    他跑到上面這一段程式之後,就自動束結了
    2008年4月12日 上午 06:48
  • HI,

     

    結束後還是可以看[輸出]視窗顯示的內容

     

    tihs

    2008年4月13日 上午 02:58
  • 最後的輸出訊息為

    'WebCamApp.exe': 已載入 'C:\WINDOWS\system32\setupapi.dll',未載入符號
    'WebCamApp.exe': 已卸載 'C:\WINDOWS\system32\setupapi.dll'
    .
    .
    .
    .
    .
    'Win32 執行緒' (0x524) 執行緒以返回碼 1282 (0x502) 結束。
    'Win32 執行緒' (0xd68) 執行緒以返回碼 1282 (0x502) 結束。
    'Win32 執行緒' (0x818) 執行緒以返回碼 1282 (0x502) 結束。
    'Win32 執行緒' (0x63c) 執行緒以返回碼 1282 (0x502) 結束。
    'Win32 執行緒' (0xb5c) 執行緒以返回碼 1282 (0x502) 結束。
    'Win32 執行緒' (0xac4) 執行緒以返回碼 1282 (0x502) 結束。
    'Win32 執行緒' (0x860) 執行緒以返回碼 1282 (0x502) 結束。
    'Win32 執行緒' (0xa18) 執行緒以返回碼 1282 (0x502) 結束。
    'Win32 執行緒' (0xe1c) 執行緒以返回碼 1282 (0x502) 結束。
    'Win32 執行緒' (0xcb8) 執行緒以返回碼 1282 (0x502) 結束。
    'Win32 執行緒' (0xffc) 執行緒以返回碼 1282 (0x502) 結束。
    'Win32 執行緒' (0x9a8) 執行緒以返回碼 1282 (0x502) 結束。
    'Win32 執行緒' (0x67c) 執行緒以返回碼 1282 (0x502) 結束。
    'Win32 執行緒' (0x390) 執行緒以返回碼 1282 (0x502) 結束。
    'Win32 執行緒' (0xecc) 執行緒以返回碼 1282 (0x502) 結束。
    'Win32 執行緒' (0x9c8) 執行緒以返回碼 1282 (0x502) 結束。
    'Win32 執行緒' (0xce8) 執行緒以返回碼 1282 (0x502) 結束。
    '[2024] WebCamApp.exe: 原生' 程式以返回碼 1282 (0x502) 結束。
    2008年4月13日 上午 05:21
  • HI,

     

    如果看不到疑似錯誤的訊息, 就只好用就要用CMemoryState類別,或是AfxCheckMemory函數來查看看了

     

    tihs

     

    2008年4月14日 上午 08:23
  • 我整理一下我的程式之後,不知道為什麼
    錯誤訊息就不見了,而且也可以順利跑完
    T_T
    謝謝各位的幫助
    2008年4月15日 上午 01:33