void SendFile6678(char * msg, SOCKET Udp, int sourceID, int destinateID, int destinatePort, int realPort,bool isPhone, bool filetext) { struct sockaddr_in s; memset(&s, 0, sizeof(struct sockaddr_in)); s.sin_family = AF_INET; s.sin_port = htons(realPort); s.sin_addr.s_addr = inet_addr(DESTINATEID); //内容 FileMsg6678 newMsg; newMsg.destinateID = BSWAP_32(destinateID); newMsg.sourceID = BSWAP_32(sourceID); newMsg.destinatePort = BSWAP_32(destinatePort); int isphone = 1; if (isPhone) { isphone = 0; } newMsg.isPhone = BSWAP_32(isphone); memcpy(newMsg.data, msg, sizeof(DataPackage)); int ret=0; ret = sendto(Udp, (const char*)&newMsg, sizeof(FileMsg6678), 0, (struct sockaddr*)&s, sizeof(s));}报错msg无法读取内存,但是data数据却存在
时间: 2024-04-19 12:24:22 浏览: 132
DBUtils操作数据库以及事物的管理
根据你提供的代码,出现 "msg 无法读取内存" 的错误可能是因为 `msg` 参数指向的内存地址无效或者已经被释放。这种错误通常发生在访问非法指针或者已经释放的内存时。
首先,确保 `msg` 参数指向一个有效的字符数组,并且数组长度足够容纳 `sizeof(DataPackage)` 字节的数据。如果 `msg` 的长度小于 `sizeof(DataPackage)`,那么使用 `memcpy` 复制数据时可能会造成访问非法内存的错误。
其次,如果你在调用 `SendFile6678` 函数之前对 `msg` 进行了动态内存分配(例如使用 `malloc` 或者 `new`),请确保在调用 `sendto` 函数之后释放了该内存。
最后,检查调用 `SendFile6678` 函数时传递的参数是否正确,并且确保 `Udp` 是一个已经初始化并绑定了正确地址和端口的套接字。
如果问题仍然存在,请仔细检查代码其他部分,确保没有其他地方对 `msg` 或者 `newMsg.data` 进行了无效的操作。
如果你能提供更多关于代码上下文和错误信息的信息,我可以给出更具体的建议来帮助你解决问题。
阅读全文