Dll分配的内存块,应用释放的问题
我在dll中分配了一块内存,通过PostMessage将其地址传给应用.
然后应用去释放它,结果总是报异常.
dll代码如下:
typedef struct _Test_Struct
{
char *lpszOutData;
UINT uDataLen;
}TESTSTRUCT,*LPTESTSTRUCT;
#define WM_TESTDLL (WM_USER + 10)
HWND m_hWnd;
DWORD WINAPI TestThreadProc(LPVOID pParam);
extern "C" void WINAPI TestFreeMemory(HWND hWnd)
{
m_hWnd = hWnd;
CreateThread(NULL,0,TestThreadProc,NULL,0,NULL);
}
DWORD WINAPI TestThreadProc(LPVOID pParam)
{
LPTESTSTRUCT lpTest = new TESTSTRUCT;
lpTest->lpszOutData = new char[100];
strcpy(lpTest->lpszOutData,"100000000000000000");
lpTest->uDataLen = strlen(lpTest->lpszOutData);
PostMessage(m_hWnd,WM_TESTDLL,0,(LPARAM)lpTest);
return 0;
}
应用程序的相应代码如下:
void CTestDlg::_TestFreeMemory(WPARAM wParam,LPARAM lParam)
{
LPTESTSTRUCT lpTest = (LPTESTSTRUCT) lParam;
AfxMessageBox(lpTest->lpszOutData);
delete[] lpTest->lpszOutData;
delete lpTest;
}
当我运行到delete[] lpTest->lpszOutData时内存报错.
我在应用程序写了和dll一样中处理代码没有问题.如下:
#define WM_TESTDLL2 (WM_USER + 11)
void CTestDlg::_TestFreeMemory2(WPARAM wParam,LPARAM lParam)
{
LPTESTSTRUCT lpTest = (LPTESTSTRUCT) lParam;
AfxMessageBox(lpTest->lpszOutData);
delete[] lpTest->lpszOutData;
delete lpTest;
}
DWORD WINAPI TestThreadProc(LPVOID pParam);
HWND g_wnd;
void CTestDlg::OnBtnfreememory2()
{
// TODO: Add your control notification handler code here
g_wnd = m_hWnd;
CreateThread(NULL,0,TestThreadProc,NULL,0,NULL);
}
DWORD WINAPI TestThreadProc(LPVOID pParam)
{
LPTESTSTRUCT lpTest = new TESTSTRUCT;
lpTest->lpszOutData = new char[100];
strcpy(lpTest->lpszOutData,"01111111111111111111");
lpTest->uDataLen = strlen(lpTest->lpszOutData);
PostMessage(g_wnd,WM_TESTDLL2,0,(LPARAM)lpTest);
return 0;
}
此段没有问题.
请指教!感谢!