gpt4 book ai didi

c++ - 数组的第一个字符被填充了不正确的数据 C++

转载 作者:行者123 更新时间:2023-11-30 03:00:32 26 4
gpt4 key购买 nike

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

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 }

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

最佳答案

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

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

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

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

或者在 C++ 中使用 std::vector

关于c++ - 数组的第一个字符被填充了不正确的数据 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11909535/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com