首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

关于一个socket相关的有关问题,多谢

2014-01-23 
关于一个socket相关的问题,谢谢为什么我使用了 delete []cip后我的socket就出问题了呢,我注释掉后我的程

关于一个socket相关的问题,谢谢
为什么我使用了 delete []cip;后我的socket就出问题了呢,我注释掉后我的程序运行都正常,难道这个cip不能不回收?这个cip是用在server_addr.sin_addr.s_addr = inet_addr(cip);里面了,谢谢大家


 WSADATA wsaData;
 SOCKADDR_IN server_addr;
 WORD wVersion;
 wVersion = MAKEWORD(2,2);
 /*初始化socket资源*/
 WSAStartup(wVersion, &wsaData); 

 
 //获取长度
int len = WideCharToMultiByte(CP_ACP, 0, ip_p, ip_p.GetLength(), NULL, 0, NULL, NULL); 
char * cip = new char[len+1]; 
memset(cip, 0x00, len+1);
//宽字节转多字节
WideCharToMultiByte(CP_ACP, 0, ip_p, ip_p.GetLength(), cip, len, NULL, NULL); 
cip[len+1] = '\0'; 


 //server_addr.sin_addr.s_addr = inet_addr(tmpData);
 server_addr.sin_addr.s_addr = inet_addr(cip);
 server_addr.sin_family = AF_INET;
 server_addr.sin_port = htons(_ttoi(port_p));
 if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET)
 {
 //create socket error
 check = false;
 }
 if (connect(sock, (struct sockaddr *) &server_addr, sizeof(SOCKADDR_IN)) == SOCKET_ERROR)
 {
  //connect error
  check = false;
 }
 else
 {
 //连接成功
 check = true;
 m_bActive = true;
 m_connectype = TCPIP;
 }
// delete []cip;


[解决办法]
感觉 WideCharToMultiByte 使用得有问题, 这个函数破坏了cip, 所以导致你不能回收. 你可以单步跟一下WideCharToMultiByte. 看转换的结果是否正确.
[解决办法]
cip[len+1] = '\0'; 这行代码已经证明了转换不正确. 转换正确的话是不需要你这行代码的.
[解决办法]
char * cip = new char[len+1];
cip[len+1] = '\0';      //这不是越界了?                             
[解决办法]
cip[len+1] = '\0'; 字符数组越界赋值了,len + 1大小的下标范围是0-len,越界赋值导致删除异常了。

热点排行