int BitWidth=100;
send(ServerSock,(char*)&BitWidth,sizeof(BitWidth)+1,MSG_OOB);
向服务器发送信息的函数,本来,send的第二个参数应该是缓冲区,但BitWidth是一个整型值,所以要进行转化,而上面的形式是可以连接成功的。但第三个参数为什么要加1?不加1就出现内存错误,为什么?

解决方案 »

  1.   

    因为sizeof(BitWidth)得到的结果是4,因为整型数在内存中占4个字节。
    而你在send的时候将他转换成了char*,因为char*是以0结尾的字符串,send函数中的+1
    就是将缓冲区的大小增加了一个字节,用来存放字符串的结束标志0。如果不加,你的缓冲区
    就会溢出,当然出现内存错误了!
      

  2.   

    我感觉vcforever(霓裳羽衣)和 atEleven(@十一) 说的不是处内存错误的原因第三个参数是传递的数目
    跟缓冲区的大小没有关系
      

  3.   

    如果用char*进行强制转换,BitWidth的内存数量就自动增加了1?也就是说,强制转化后,内存又被强制转化的操作自动多分配了1(new 1)?从而导致了(char*)&BitWidth的长度变成了5?对不?
      

  4.   

    我认为肯定不对。
    我还是那句话,你到底出错出在哪句上,我想send函数是不会出错的。
      

  5.   

    vcforever(霓裳羽衣)
    说的很对我开始想了想,未果!!他的解释应该是对的!!
      

  6.   

    强制转换不会产生'\0'.通常发送结构例如:
    MSG msg;send(ServerSock,(char*)&msg,sizeof(MSG),0);是有多少发多少
    估计是第4个参数MSG_OOB或者其他异常地方导致,与强制转换没有关系