我希望在PostMessage中传递两个参数,一个是动态内存的指针,一个是int,代码如下:
void ReceiveProc()
{
char buf[1024];
int len; len = recv(MySocket,(char *)&buf,1024,0);
if(len)
{
char* pDataBuf = new char[len];
memcpy(pDataBuf,buf,1024);
::PostMessage(AfxGetMainWnd()->m_hWnd,WM_CLIENT_READCOLOSE,(WPARAM)pDataBuf,len);
}
return 0;
}在处理PostMessage中:
void CMainFrame::OnAcceptCloase(WPARAM wParam,LPARAM lParam)
{
char dataBuf[1024];
memset(dataBuf,0,1024);
char *pDataBuf = (char *)wParam;
unsigned long len = lParam;
memcpy(dataBuf,pDataBuf,len);
delete pDataBuf;
......
}
我希望在处理PostMessage消息中将消息copy出来,然后delete刚才动态申请的内存
但在执行到上面delete pDataBuf后程序出现异常。
不知道为什么?
void ReceiveProc()
{
char buf[1024];
int len; len = recv(MySocket,(char *)&buf,1024,0);
if(len)
{
char* pDataBuf = new char[len];
memcpy(pDataBuf,buf,1024);
::PostMessage(AfxGetMainWnd()->m_hWnd,WM_CLIENT_READCOLOSE,(WPARAM)pDataBuf,len);
}
return 0;
}在处理PostMessage中:
void CMainFrame::OnAcceptCloase(WPARAM wParam,LPARAM lParam)
{
char dataBuf[1024];
memset(dataBuf,0,1024);
char *pDataBuf = (char *)wParam;
unsigned long len = lParam;
memcpy(dataBuf,pDataBuf,len);
delete pDataBuf;
......
}
我希望在处理PostMessage消息中将消息copy出来,然后delete刚才动态申请的内存
但在执行到上面delete pDataBuf后程序出现异常。
不知道为什么?
解决方案 »
- ShellExecuteEx执行问题
- SendMessage(WM_PAINT)和Invalidate()
- 关于动态库里的内部调用?
- 关于编译出现的问题,DEBUG和RELEASE编译结果不同
- 菜鸟求救,但没钱了。F:\skin\skin.cpp(7) : fatal error C1083: Cannot open include file: 'library.h': No such file or directory
- 在VC中,nmake是做啥的,怎么用。能不能举例说明
- 寻高手兼职
- 如何用数据库存储视频流?
- 急。用PNG图片加载对话框背景之透明问题(在线等)
- VC6.0有没有实现位对齐?
- 关于_variant_t的使用, 请高手指点..
- 在CListCtrl中不能用Invalidate()刷新GetFirstSelectedPosition()吗?
char *p = (char *)msg.wParam;
memcpy(pBuf , p , strlen(p));
delete p;这是我以前写的程序的内容,没有任何问题,我想错误不是出在这里,你看看你的下文有没有用到pDataBuf的地方,或者你把pDataBuf删除掉看看还会有异常么?
if(len)
{
char* pDataBuf = new char[len];
memcpy(pDataBuf,buf,1024);//len的长度未必是1024,可能更小...:memcpy(pDataBuf, buf, len ) ;
delete pDataBuf;//似乎该用 delete [] pDataBuf ;
我已经改过memcpy(pDataBuf,buf,1024)为memcpy(pDataBuf,buf,len)。
但还是在delete pDataBuf这句程序出异常。
如果我不执行这句,那程序一切ok,但我这句是必须要执行的啊,否则就会有内存泄漏啊!
但是我建议你这样发送消息:::SendMessage(AfxGetMainWnd()->m_hWnd,WM_CLIENT_READCOLOSE, len, (LPARAM)pDataBuf);
看起来你是在一个线程里向主程序发送消息哦。如果你实在搞不定的话,就改一下算法吧。
比如,你把接受到的数据放在全局变量中,用同步来实现。呵呵,个人看法而已。