zoukankan      html  css  js  c++  java
  • 没有使用netbuf_delete后!

    while(1)
    {
        netconn_recv(udpconn,&recvbuf);
        if(recvbuf != NULL)
        {
            OS_ENTER_CRITICAL();
            memset(udp_recvbuf,0,UDP_RX_BUFSIZE);
            for(q=recvbuf->p;q!=NULL;q=q->next)  //遍历完整个pbuf链表
           //判断要拷贝到UDP_RX_BUFSIZE中的数据是否大于UDP_DEMO_RX_BUFSIZE的剩余空间,如果大于
            //的话就只拷贝UDP_RX_BUFSIZE中剩余长度的数据,否则的话就拷贝所有的数据
            if(q->len > (UDP_RX_BUFSIZE-data_len)) memcpy(udp_recvbuf+data_len,q->payload,(UDP_RX_BUFSIZE-data_len));//拷贝数据
            else memcpy(udp_recvbuf+data_len,q->payload,q->len);
            data_len += q->len; 
            if(data_len > UDP_RX_BUFSIZE) break; //超出TCP客户端接收数组,跳出    
           OS_EXIT_CRITICAL();
          if(strncmp((char *)udp_recvbuf,"sys:addr?",9)==0)
            {
            addr = netbuf_fromaddr(recvbuf);
            port = netbuf_fromport(recvbuf);
            sentbuf = netbuf_new();
               netbuf_alloc(sentbuf,strlen((char*)udp_sendbuf));
            sentbuf->addr = *addr;
            sentbuf->port = port;
            memcpy(sentbuf->p->payload,(void*)udp_sendbuf,strlen((char*)udp_sendbuf));
            err = netconn_send(udpconn,sentbuf);
            if(err!=ERR_OK)
               {                                        
            printf(
    "发送失败\r\n");
           }
          netbuf_delete(sentbuf); //当这个没用正确使用的时候 }// if(strncmp((char *)udp_recvbuf }// if(recvbuf != NULL) }//while(1)

    当netbuf_delete没有使用的时候,再一次调用netbuf_alloc函数时,会报错,

    LWIP_ERROR("netbuf_alloc: invalid buf", (buf != NULL), return NULL;);

    直接返回NULL。

    查看LWIP_ERROR宏后,可知sentbuf=NULL才能成立。

    但是,不知道为什么没有释放sentbuf,在新建netbuf_new赋值的就是NULL的了。

    懒惰不会让你一下子跌到 但会在不知不觉中减少你的收获; 勤奋也不会让你一夜成功 但会在不知不觉中积累你的成果 越努力,越幸运。
  • 相关阅读:
    选择排序
    插入排序
    冒泡排序
    linux 常用命令全集
    Boost简介
    postgresql命令行
    Ncurses 命令行图形库
    rsync ssh文件同步
    BusyBox参考
    screen命令
  • 原文地址:https://www.cnblogs.com/Rainingday/p/5919719.html
Copyright © 2011-2022 走看看