新手上路
- 积分
- 45
- 金钱
- 45
- 注册时间
- 2015-7-29
- 在线时间
- 4 小时
|
1金钱
以下是源代码
s8 udp_senddata(struct udp_pcb *upcb,u8 *sendbuf,u8 len)
{
struct pbuf *ptr;
static s8 err_s;
ptr=pbuf_alloc(PBUF_TRANSPORT,len,PBUF_POOL); //éêÇëÄú′æ
if(ptr)
{
//ptr->payload=(void*)sendbuf; //此行代码为原子源代码
memcpy(ptr->payload,sendbuf,len);//此行代码是本人更正后的代码
err_s=udp_send(upcb,ptr); //
pbuf_free(ptr);//êí·ÅÄú′æ
}
return err_s;
}
问题描述:在调用udp_senddata(struct udp_pcb *upcb,u8 *sendbuf,u8 len)时,会出现程序中定义的某个全局变量数值被更改的情况。
原因:在调用udp_senddata()时,ptr->payload=(void*)sendbuf; 代码将要发送的UDP发送数组的指针给了 ptr->payload。而在执行UDP发送时,LWIP源码库里会操作ptr->payload 以及ptr->payload前后的内存,这样就相当于把 sendbuf前后的内存给践踏了。以至于全局变量被更改。
解决措施:改用memcpy(ptr->payload,sendbuf,len);//此行代码是本人更正后的代码,将要发送的数组sendbuf拷贝到 ptr->payload,而不是将数组sendbuf的指针赋给 ptr->payload。实际验证,措施有效。
请原子哥回答一下,上述描述是否合理。
|
|