while(1)
{
socket_client.Receive(&size,4);//接受信息
p=new byte[size];

//socket_client.Receive(p,size);//接受信息
TCPrecv(socket_client,(char *)p,size,0);  //接受大信息函数

IplImage* src=GetIplFromBmp(p,size);
IplImage* dst;
double scale=5;//缩放比例
CvSize dst_size;//定义二维化矩形框
dst_size.width = (int)(src->width * scale);
dst_size.height = (int)(src->height * scale);//确定新图的矩形框
//dst=cvCreateImage(dst_size,src->depth,src->nChannels);//创建图像头
dst=cvCreateImage(dst_size,8,3);//创建图像头
cvResize(src,dst,CV_INTER_LINEAR);//使用双线性差值减小图像。
BITMAPINFO bmi;
FillBitmapInfo(&bmi, dst->width, dst->height, dst->depth*dst->nChannels);
//CWnd* wnd=AfxGetMainWnd();
CWnd* wnd=GetDlgItem(IDC_IMAGE);    //取指针
ShowImage(dst, wnd, bmi); // 这里的wnd是目标窗口,必须是CWnd类型的。
delete []p;
CloseHandle(wnd);  
cvReleaseImage(&src);
cvReleaseImage(&dst);
}

解决方案 »

  1.   

    debug下,看哪句出现内存错误。代码中最好增加一些判断,比如Receive后size的值,src指针是否正确获得等等。
      

  2.   

    数据一分钟后出现内存错误,帮我看看代码如下:[问题点数:20分]
    网络程序很难DEBUG,最好在每个步骤写Log文件,看看问题在哪里,不一定是包太大造成的。
    另外接受信息和发送信息有很多技巧的,比如先传递包头,包含包长度信息,校验信息等,
    然后再传递包体,接收的信息要检查完整,校验,最后才是使用,貌似你这个什么都没做。
      

  3.   

    写log,你在网上找找,或者找一本书,凡是操作文件,写文件的偶可以,或者你把一些不同类型的代码分类,先屏蔽一些代码,看是否还有这些问题。然后一步一步的找找看,总能找到。
      

  4.   

    朋友们先谢过了,问题找到了,cvResize(src,dst,CV_INTER_LINEAR);//使用双线性差值减小图像。这条语句有问题,把它注释了就好了,可是不用它又如何把图象缩小呢?
    请大侠们指点一二!