1

在头文件中,我声明了一个具有数组和数组长度的结构,如下所示:

typedef struct {
    unsigned char *frame;
    int length;
} ResponseFrame ;

extern ResponseFrame rf;

在我的主文件中,我有以下内容:

ResponseFrame rf;

int main(void)
{
   while(1) {
      if (receive() == 0x01) {
         uint8_t val;
         rf.length = 6;
         for(int i = 0; i < 6; i++){
            val = receive();
            rf.frame[i] = val;
            transmit(val);            // LINE 1
         }


         for (uint8_t i=0; i<rf.length; i++){
            transmit(rf.frame[i]);    // LINE 2
         }
      }
   }
}

我收到的数组是

{ 00 00 FF 00 FF 00 }

初始传输用这个接收到的数据做出响应[见第 1 行]。但是,当我尝试使用全局变量 rf.frame [参见第 2 行] 进行传输时,第一个值与此不同----

{ 13 00 FF 00 FF 00 }

为什么第一个初始值这样不同?

4

2 回答 2

2

您从不为 分配任何内存ResponseFrame.frame,因此您遇到了未定义的行为。

您假设通过做rf.length = 6;,大小会unsigned char *frame;以某种方式神奇地增加,但事实并非如此。

如果您确定尺寸,则需要:

rf.length = 6;
rf.frame = malloc(sizeof(unsigned char) * 6);   //for C

std::vector在 C++ 中使用 a 。

于 2012-08-10T21:34:20.537 回答
1

部分问题可能在于它似乎依赖于未定义的行为。它看起来(从显示的代码)frame从未初始化。如果是固定大小,可以声明为:

unsigned char frame[6];

否则,它可能需要调用来malloc为其分配内存。

于 2012-08-10T21:35:02.303 回答