返回值无效

问题描述 投票:0回答:1

我对返回指针的值有疑问,我已经阅读了本主题,所以请不要添加重复的消息。 How to access a local variable from a different function using pointers?

这是我们的最后一个主题Return value problem without Delay Function

我在STM32F4和交换IC上有一个以太网应用程序,我可以接收ping并回复ping。我的问题是代码或内存有问题。当我将另一个文件中的某个值返回到main.cpp文件时,我做不到最后一个主题,但是此主题已关闭并删除,因此我更改了代码,但没有成功。问题的返回值在哪里?循环中的if(mArray)条件仅工作一次

main.cpp文件中,我使用以下代码:

int main(){
uint8_t * mArray= (uint8_t *)( malloc(sizeof( uint8_t) * 61));
uint8_t dummyBuffer[61]
...
while(1){

if(mArray){
  mArray=ethernetif_input(&gnetif);
}
if((mArray)[0]==0x01){
    for(int i=0; i<61;i++)
     {
          dummyBuffer[i] = (mArray)[i];
     }
   free(mArray);
}

}

然后在ethernetif.c文件中:

uint8_t * ethernetif_input(struct netif *netif){
  err_t err;
  struct pbuf *p;
   uint8_t * myArray =(uint8_t*)(malloc(sizeof( uint8_t) * 61));

   if(!myArray)
    return NULL;
 p = low_level_input(netif);
  /* no packet could be read, silently ignore this */
  if (p == NULL) {

      return NULL;
  }
    if (memcmp (p->payload, "\x01\x80\xC2\x00\x00\x00", 6) == 0){

    {
      for(int i = 0; i < 61; i++)
      {
  myArray[i]=(((uint8_t*)p->payload)[i]);
      }
}
else{
      /* entry point to the LwIP stack */
  err = netif->input(p, netif);

  if (err != ERR_OK)
  {
    LWIP_DEBUGF(NETIF_DEBUG, ("ethernetif_input: IP input error\n"));
    pbuf_free(p);
    p = NULL;
  }
     }
  }
 if(p != NULL)
  {
    pbuf_free(p);
    p=NULL;

  }
  return myArray;
}
c stm32 ethernet
1个回答
0
投票

您可以使用mArray这样。你还好吗?

int main(){

    uint8_t dummyBuffer[61]
    // ...
    while(1){

        uint8_t * mArray=ethernetif_input(&gnetif);

        if(!myArray)
            return 0;             

        if((mArray)[0]==0x01){
             for(int i=0; i<61;i++)
             {
                 dummyBuffer[i] = (mArray)[i];
             }
            free(mArray);
        }

    }
}

uint8_t *ethernetif_input(struct netif *netif){
  err_t err;
  struct pbuf *p;
  uint8_t * myArray =(uint8_t*)(malloc(sizeof( uint8_t) * 61));
   if(!myArray)
        return NULL;
   p = low_level_input(netif);
   /* no packet could be read, silently ignore this */
   if (p == NULL) {
      free(mArray);
      return NULL;
   }
   if (memcmp (p->payload, "\x01\x80\xC2\x00\x00\x00", 6) == 0){
   {
        for(int i = 0; i < 61; i++)
        {
            myArray[i]=(((uint8_t*)p->payload)[i]);
        }
    }
    else{
          /* entry point to the LwIP stack */
          err = netif->input(p, netif);

         if (err != ERR_OK)
         {
               LWIP_DEBUGF(NETIF_DEBUG, ("ethernetif_input: IP input error\n"));
               pbuf_free(p);
               p = NULL;
          }
      }
   }
   if(p != NULL)
   {
      pbuf_free(p);
      p=NULL;

   }
}
return myArray;
© www.soinside.com 2019 - 2024. All rights reserved.