错误信息如下:breakpoint的设定位置 0x7c9412307C941230  int   3

解决方案 »

  1.   


    我对VC++不是很清楚,不知道该从何查起啊...... 就是点一个画面的OK按钮就出现这个问题了.
      

  2.   

    F5跟踪调试,程序崩溃时点“重试”按钮,VC会定位到出错的地方,然后你看看VC下面变量列表中堆栈地址,看看是哪里引起的
      

  3.   


    没有“重试”按钮啊,只有[OK]按钮,点了OK,底下也没有变量.
    这时候停了程序,有下面的信息.
    HEAP[HSV_CONSL.exe]: HEAP: Free Heap block 170018 modified at 170080 after it was freed
      

  4.   

    breakpoint的设定位置 0x7c941230 
    这个错误是哪里来的?
      

  5.   

    看起来像是使用了释放后的内存指针。
    用F5运行程序,出错后,用鼠标右击VC的菜单栏或工具栏,选择“Call Stack”,这个窗口会列出程序运行到当前位置所调用的各个函数,双击可以定位到源代码上,找出自己的代码再分析原因。
      

  6.   

    NTDLL! 7c941230()
    NTDLL! 7c989a2e()
    NTDLL! 7c9669a9()
    NTDLL! 7c9ae062()
    NTDLL! 7c98a5d0()
    NTDLL! 7c9668ad()
    KERNEL32! 7c809988()
    MSCTF! 746615c0()
    MSCTF! 7467bf2a()
    MSCTF! 7467ca8a()
    MSCTF! 7467c015()
    MSCTF! 74682a58()
    MSCTF! 74683535()
    MSCTF! 7467f539()
    MSCTF! 7467faff()
    USER32! 77cf8709()
    USER32! 77cf87eb()
    USER32! 77cfb368()
    USER32! 77cfb3b4()
    NTDLL! 7c94eae3()
    USER32! 77cfe010()
    UXTHEME! 58733c20()
    UXTHEME! 5874e300()
    UXTHEME! 58731ac7()
    UXTHEME! 5873367a()
    USER32! 77cfe02b()
    USER32! 77d07593()
    USER32! 77d04bcc()
    USER32! 77d075bf()
    USER32! 77cf8709()
    USER32! 77cf87eb()
    USER32! 77cfb368()
    USER32! 77cfb3b4()
    NTDLL! 7c94eae3()
    USER32! 77cfe010()
    UXTHEME! 58733c20()
    UXTHEME! 587587b4()
    UXTHEME! 58731ac7()
    UXTHEME! 5873367a()
    USER32! 77cfe02b()
    USER32! 77d07593()
    USER32! 77d04bcc()
    USER32! 77d075bf()
    USER32! 77cf8709()
    USER32! 77cf87eb()
    USER32! 77cf89a5()
    USER32! 77cfbccc()
    WinMain(HINSTANCE__ * 0x00400000, HINSTANCE__ * 0x00000000, char * 0x00141f2f, int 1) line 179 + 12 bytes
    WinMainCRTStartup() line 198 + 54 bytes
    KERNEL32! 7c816d4f()这是CALL STACK 的内容.帮我分析一下,谢谢
      

  7.   

    while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
    if (msg.message != WM_TIMER) {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }WinMain(HINSTANCE__ * 0x00400000, HINSTANCE__ * 0x00000000, char * 0x00141f2f, int 1) line 179
    对应的是DispatchMessage(&msg);
      

  8.   

    看一下出错时msg的内容,是什么消息
      

  9.   

    HEAP[HSV_CONSL.exe]: HEAP: Free Heap block 170018 modified at 170080 after it was freed 对已经释放的东东又去赋值或者调用了。你自己添加了什么代码,在“就是我从菜单打开一个子画面,然后再关闭这个画面的时候就会出现这个问题.”子画面里面。
      

  10.   

    很有可能是内存访问越界。请仔细检查你的代码。
    当然也可以用BoundsChecker等工具检查一下。
      

  11.   

    HEAP[HSV_CONSL.exe]: HEAP: Free Heap block 170018 modified at 170080 after it was freed
    -----------------------------
    从错误信息分析,是堆释放后在170080处被修改.按10楼给的方法,找到对应的代码,看看是什么命令改变了其中内容.
      

  12.   

    查看一下message的值,看看是什么消息,再看你是如何响应该消息的。
      

  13.   


    // ウィンドウを破棄する
    DestroyWindow(lpSystemParam->hSytemParamDlg);
    memset(lpSystemParam, '\0', sizeof(SYSTEMPARAM));
    这两句有没有问题啊?
      

  14.   

    下面是字窗体的代码,帮我看下有没有问题
    谢谢大家了!VOID cnslSystemParameterInputDlg(VOID)
    {
    LPWINDOWINFO lpWnd;
    LPSYSTEMPARAM lpSystemParam;
        PROPSHEETPAGE PropSheetPage;
        PROPSHEETHEADER PropSheetHeader;
        HPROPSHEETPAGE hPropSheetPage[PAGECNT];
    static CHAR strTitleEdit[1024];
        int                     cntPage; lpWnd = &gSysInfo.WindowInfo;
    lpSystemParam = &lpWnd->SystemPara; if (lpSystemParam->hSytemParamDlg == NULL) {
    // プロパティーシートページ定義構造体の設定
    PropSheetPage.dwSize = sizeof(PROPSHEETPAGE);
    PropSheetPage.dwFlags = PSP_DEFAULT;
    PropSheetPage.hInstance = lpWnd->hInstance;
    // メッセージパラメータページ作成
    PropSheetPage.pszTemplate = MAKEINTRESOURCE(IDD_SYSPARA_MSG);
    PropSheetPage.pfnDlgProc = (DLGPROC)cnslSystemParamMessageDlgProc;
    hPropSheetPage[PAGE_MESSAGE] = CreatePropertySheetPage(&PropSheetPage);
    // プロパティーシートヘッダ構造体の設定
    memset(&PropSheetHeader, 0, sizeof(PROPSHEETHEADER));
    PropSheetHeader.dwSize = sizeof(PROPSHEETHEADER);
    PropSheetHeader.dwFlags = PSH_NOAPPLYNOW | PSH_MODELESS;
    PropSheetHeader.hInstance = lpWnd->hInstance;
    PropSheetHeader.hwndParent = lpWnd->hConsoleMsgDlg;
    PropSheetHeader.nPages = cntPage;
    PropSheetHeader.phpage = hPropSheetPage;
    PropSheetHeader.pszCaption = WTITLE_SYSPARAMSET; // プロパティーシート作成
    lpSystemParam->hSytemParamDlg = (HWND)PropertySheet(&PropSheetHeader);
    }
    else {
    // システムパラメータ設定ダイアログを最前面に
    SetWindowPos((HWND)lpSystemParam->hSytemParamDlg, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
    }
    return;
    }LRESULT CALLBACK cnslSystemParamMessageDlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
    UINT uiRet = 0;
    LPWINDOWINFO lpWnd;
    LPSYSTEMPARAM lpSystemParam;
    char cBuff[256]; lpWnd = &gSysInfo.WindowInfo;
    lpSystemParam = &lpWnd->SystemPara; // メッセージ毎の処理を行う
    switch (uMsg) {
    case WM_INITDIALOG:
    lpSystemParam->hMessageParamDlg = hWnd;
    // 画面に表示
    cnslSystemParamMessageInitProc();
    return (TRUE);
    case WM_NOTIFY:
    switch (((NMHDR*)lParam)->code) {
    // キャンセルボタン
    case PSN_QUERYCANCEL:
    // ウィンドウを破棄する
    DestroyWindow(lpSystemParam->hSytemParamDlg);
    memset(lpSystemParam, '\0', sizeof(SYSTEMPARAM));
    break;
    // CLOSEする
    case PSN_RESET:
    break;
    // OKボタン
    case PSN_APPLY:
    // ウィンドウを破棄する
    DestroyWindow(lpSystemParam->hSytemParamDlg);
    // RIC NO を初期化0に設定  // lu 2000/03/26
    icntRic=0;
    memset(lpSystemParam, '\0', sizeof(SYSTEMPARAM));
    }
    break;
    default:
    // デフォルト処理
    return (FALSE);
    }
    return (FALSE);
    }
      

  15.   

    单步调试执行完cnslSystemParamMessageDlgProc这个函数,就没法再继续下去了.
      

  16.   

    出错时,在调用堆栈窗口双击WinMain的那一行,定位到DispatchMessage之后,把鼠标移到message上,看看值是多少,然后再到winuser.h中去查是哪个消息。
      

  17.   

    我是不懂调试.对VC是门外汉啊.......这时候看到message是49389
      

  18.   

    message 49389确实是啊. 没有自定义的.