如:{
WSABUF* tt=new WSABUF[2];
...
WSARecv(s,tt,2,...);
delete [] tt;
}这样的操作是否可以?会出现什么问题吗?

解决方案 »

  1.   

    如果数据确定传输成功了,是可以删除
    你这是接收吧?
    WSABUF里只包含一个长度,一个缓冲区指针,还应该分配一个缓冲区...
      

  2.   

    所以WSABUF* tt=new WSABUF[2];改成WSABUF[2]就可以罗
      

  3.   

    如果是异步的话.是不是这个WSABUF就不能删除了?要等收完成再删除?
      

  4.   

    异步操作,你必须保证这个缓冲区在操作完成之前是有效的!否则立刻报错崩溃。
    道理很简单,你投递了异步操作到OS,然后你的程序返回,如果把缓冲区删除了,OS怎么拿那个缓冲区的数据进行操作呢?
    --------------------------
    国内专业的ACE网络编程、开发论坛开通:
    www.acejoy.com 
    www.acedevelop.com
    涉及ACE使用和开发,中间件、服务器端软件的设计,P2P技术,
    socket网络编程、应用开发等内容。
    欢迎加入,大家一起交流、学习成长!
      

  5.   

    WSABUF就是传递那么个数据缓冲区的头指针和区域长度,所以声明为stack对象就可以了