问题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;
好像不行。谢谢!!!!
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;
好像不行。谢谢!!!!
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;
delete []m_pInitData;//???
//其中dwRow和wColumn都是值可以确定的变量 m_pInitData = new DWORD*[dwRow];然后再for(int j = 0; j < dwRow; j++)
{
m_pInitData[i] = new DWORD[wColumn];
}
{
delete []m_pInitData[j];
}delete []m_pInitData;
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).错误是出现在调用程序的析构函数时,但我找不到它,怎么加断言啊?
再问一个简单的问题吧,我写了一个类(CPlayer)用来播放动画的,并用该类在一个基于对话框的程序里声明了一个对象:
private:
CPlayer m_Player;
其中类CPlayer中有几个共有成员函数,我想在对话框程序里创建一个线程来播放动画,不知怎么实现呢?线程可以通过按钮控制,包括运行,挂起等。有没有类似的代码供参考。 看教科书比较麻烦,没那么多时间按。
谢谢!!
停止就删除线程. 可以通过一个标志让线程自动退出.最好