慧星要撞地球了?这几行代码出这么大的错。。急!!!!!

哟西哟西地 2003-12-04 01:21:07
在另一个CPP中AfxBeginThread
QUERY_INFO为一个结构。
线程的上的是连接到一个WEB服务器的80端口。

UINT STARTThread(LPVOID lParam)
{
QUERY_INFO *qInfo=(QUERY_INFO *)lParam;
CSocket socket;
if(!socket.Create())
{
AfxMessageBox("创建套接字错误,无法完成请求!");
::PostMessage(qInfo->hWnd,START_QUERY_ERROR,0,0);
return 0;
}
if(!socket.Connect("61.152.11.10",80))
{
AfxMessageBox("连接到服务器失败!无法完成请求!");
::PostMessage(qInfo->hWnd,START_QUERY_ERROR,0,0);
return 0;
}
.....................
.....................

if(socket.Send(sendQuest,strlen(sendQuest))==SOCKET_ERROR)
{
AfxMessageBox("发送请求失败!");
::PostMessage(qInfo->hWnd,START_QUERY_ERROR,0,0);
return 0;
}
===========================================以上均无错
CString strReceive;
BOOL bStartHtml=FALSE;
byte *recBuf=new byte[1024];
while(1)
{
//byte *recBuf=new byte[1024];
int recLen;
memset(recBuf,0,1024);
recLen=socket.Receive(recBuf,1024);
if((recLen>0)&&(recLen!=SOCKET_ERROR))
{
if(!bStartHtml)
{
for(int i=0;i<recLen;i++)
{
if(recBuf[i]!='<')
recBuf[i]=' ';
else
{
bStartHtml=TRUE;
break;
}
}
}
recBuf[recLen]='\0';
strReceive+=(CString)recBuf;
}
else;
break;
//delete recBuf;
}
delete[] recBuf==============>一执行到这一步时就出错:

Debug Error:
DAMAGE:after normal block(#304)at 0x00346f08

我只是想释放new开的堆空间,为什么出这么大的错?如果注掉这一句就没事了。

我晕。从没遇到过。为了这错误我整整花了一天的时间还没结果。。。。

急!!!!!!!!!!!!!!!!!!!!
...全文
36 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
red-fly 2003-12-05
  • 打赏
  • 举报
回复
這一句:
recBuf[recLen]='\0';
要判斷recLen是否大於1023,這樣
if ( recLen<1024 )
recbuf[recLen] = '\0';
這樣表明如果長度到了1024,則系統會自動加上'\0'字符,因為你的長度就是1024,否則就是你自己加上的'\0'字符

樓主試一試,期待成功
foxnt 2003-12-05
  • 打赏
  • 举报
回复
内存越界而已,小意思
byybyybyy 2003-12-04
  • 打赏
  • 举报
回复
else;
break;
//delete recBuf;

把else后面的分号去掉应该可以了
checkyvc6 2003-12-04
  • 打赏
  • 举报
回复
strReceive+=(CString)recBuf; 这句话有问题
你看看 mfc源码里面 += 重载的过程是什么样的
我觉得你在strReceive+=(CString)recBuf; 后面加上strReceive.ReleaseBuf()试试

不过我建议你把delete[] recBuf 改成delete recBuf
我以前就是这样解决的
mahatma_cn 2003-12-04
  • 打赏
  • 举报
回复
应该加到delete[] recBuf;前面
mahatma_cn 2003-12-04
  • 打赏
  • 举报
回复
在最后加上strReceive.Empty();
mahatma_cn 2003-12-04
  • 打赏
  • 举报
回复
这种提示一般都是你的CString操作有误造成的
sxxny 2003-12-04
  • 打赏
  • 举报
回复
越界
DuMiYue 2003-12-04
  • 打赏
  • 举报
回复
1。去掉ELSE后面的分号
2。byte *recBuf=new byte[1024]改为byte *recBuf=new byte[1025];
iron莫 2003-12-04
  • 打赏
  • 举报
回复
用delete recBuf;试一试!
Semigod 2003-12-04
  • 打赏
  • 举报
回复
else; // 把这个分号去掉试试先
break;
//delete recBuf;

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧