从函数

时间:2015-10-09 13:46:16

标签: c arduino

请原谅我,如果它太基本但我会崩溃,而且似乎我真的不明白。

我有一个全局变量:

char *incomingData="";

然后我有这个函数从某些硬件获取一些数据:

void readWifDataAsSever(char* reqData)
{
          char data[100]={0};
          //...
          if (len > 0) 
           {

                  for(uint32_t i = 0; i < len; i++) 
                       data[i]=(char)buffer[i];

               ParseGetRequest( data ); //some other manipulation
                   reqData=data;
            }
          else
            reqData="";

}

然后我试图从另一个地方调用该函数,给它全局变量,并从函数中获取新数据:

readWifDataAsSever(incomingData);  //incoming data is the global i just show
//check length of incomgin data
很明显,不仅仅是我做错了,我真的不知道指针。

我知道data's生命只在函数内部。

我试图理解为什么这是错的,你应该怎么做呢。 感谢。

1 个答案:

答案 0 :(得分:5)

不允许您尝试执行的操作,因为var genderFilter1 = { someFilter }; var genderFilter2 = { someFilter }; var gridOptions1 = { data: ..., columnDefs: [ { field: 'foo', filter: genderFilter1 }, ... }; var gridOptions12 = { data: ..., columnDefs: [ { field: 'foo', filter: genderFilter2 }, ... }; 退出readWifDataAsSever的那一刻变得无效。通过任何可能仍指向它的指针访问它是未定义的行为。

但是,您的程序甚至没有这样做:因为您按值传递data指针,对它的任何赋值都不会对调用者产生任何影响,即

reqData

会更改您的函数调用者所看到的内容。

为了解决问题,您需要执行以下两项操作之一:

  • 将有效的缓冲区传递给函数及其长度或
  • 在函数内部进行动态分配,让调用者释放结果。

由于您正在使用资源有限的嵌入式系统,因此第一种方法最适合您的情况:

reqData=data;