问题1: 我做了一个基于对话框的程序,但没有要windows提供的对话框的标题和最小化、最大化和关闭窗口按钮。而是自己加了一个按钮,然后在里面调用CDialog::OnCancle()来关闭程序.但关闭程序时系统发出“轰”的一声。就好像是出现错误或者警告时弹出一个对话框是那种声音。    这种声音只有在调试时才有,生成Release版本后就没有. 我跟踪了一下产生声音的地方是以下的程序段:
          CUSBCarAVDlg dlg;
          m_pMainWnd = &dlg;
          int nResponse = dlg.DoModal();//这里返回了一个错误的值:-858993460 下面就出错了60:       if (nResponse == IDOK)
61:       {
62:           // TODO: Place code here to handle when the dialog is
63:           //  dismissed with OK
64:       }
65:       else if (nResponse == IDCANCEL)
66:       {
67:           // TODO: Place code here to handle when the dialog is
68:           //  dismissed with Cancel
69:       }
70:
71:       // Since the dialog has been closed, return FALSE so that we exit the
72:       //  application, rather than start the application's message pump.
73:       return FALSE;
00416BBE   mov         dword ptr [ebp-226Ch],0
00416BC8   mov         dword ptr [ebp-4],0FFFFFFFFh
00416BCF   lea         ecx,[ebp-2264h]
                       //调用类CUSBCarAVDlg的析构函数时系统发出“轰”的一声
00416BD5   call        @ILT+1050(CUSBCarAVDlg::~CUSBCarAVDlg) (0040141f)
00416BDA   mov         eax,dword ptr [ebp-226Ch]   问题2:内存泄漏
   我在程序的头文件里声明了一个双指针变量,也就是说 它是一个成员变量
         DWORD  **m_pInitData;
然后在程序的一个成员函数里为它申请了内存空间,并存放了数据,这些数据我想在程序关闭时才释放,不知道怎么释放呢?我在上面提到的自己写的OnCancle()用
        delete []m_pInitData;
好像不行。谢谢!!!!

解决方案 »

  1.   

    那要看你 DWORD  **m_pInitData;怎么申请空间的,举个例子:char** data = new char*[3];
    char* init[] = {"Paris", "in the", "Spring"};
    for(int i = 0; i < 3; i++)
    {
    data[i] = new char[strlen(init[i]) + 1];
    strcpy(data[i], init[i]);
    }for(i = 0; i < 3; i++)    //释放
    delete [] data[i];
    delete [] data;
      

  2.   

    DWORD  **m_pInitData;
    delete []m_pInitData;//???
      

  3.   

    我用以下方法申请内存:目的是生成一个dwRow行,wColumn列的数组
    //其中dwRow和wColumn都是值可以确定的变量    m_pInitData = new DWORD*[dwRow];然后再for(int j = 0; j < dwRow; j++)
    {
        m_pInitData[i] = new DWORD[wColumn];
    }
      

  4.   

    那按我提供的去释放:for(int j = 0; j < dwRow; j++)
    {
        delete []m_pInitData[j];
    }delete []m_pInitData;
      

  5.   

    seu07201213(【东南】汪洋中的一片叶子 的方法是正确的,谢谢!没人知道懂第一个问题吗?
      

  6.   

    “轰”的一声,应该是断言错误,Debug下检测assert()条件不成立 会抛出断言,你程序正在退出时有断言错误,Realse是不会去检查这些东西的至于怎么出现断言了, 要你自己去慢慢调试,找具体原因,具体情况具体对待
      

  7.   

    调试时出现下面的错误提示信息:
    First-chance exception in USBCarAV.exe (KERNEL32.DLL): 0xC0000005: Access Violation.
    The thread 0x9B0 has exited with code 3 (0x3).
    The program 'E:\USBCarAV\Debug\USBCarAV.exe' has exited with code 3 (0x3).错误是出现在调用程序的析构函数时,但我找不到它,怎么加断言啊?
      

  8.   

    问题自己解决了,呵呵,这份数不好给。
    再问一个简单的问题吧,我写了一个类(CPlayer)用来播放动画的,并用该类在一个基于对话框的程序里声明了一个对象:
    private:
       CPlayer m_Player;
    其中类CPlayer中有几个共有成员函数,我想在对话框程序里创建一个线程来播放动画,不知怎么实现呢?线程可以通过按钮控制,包括运行,挂起等。有没有类似的代码供参考。 看教科书比较麻烦,没那么多时间按。
    谢谢!!
      

  9.   

    第一个问题, 不好判断, 估计多半是你的Dialog里哪里代码不正常.导致对话框返回的时候出现了问题.
      

  10.   

    运行就创建线程 CreateThread, 暂停就SuspendThread
    停止就删除线程. 可以通过一个标志让线程自动退出.最好