gpt4 book ai didi

c - 溢出?找不到来源,奇怪

转载 作者:行者123 更新时间:2023-11-30 17:22:09 27 4
gpt4 key购买 nike

我的项目中有以下两个结构

typedef volatile struct {
unsigned char rx_buf[MAX_UART_BUF]; //Input buffer over UART
uint8_t rx_flag; //Indicates received data over UART
uint8_t rx_length; //length of the input buffer
} UART;

UART *gUART;

typedef volatile struct {
unsigned int target_s[NR_BLDC]; //Target Position in Signals
int distance_s[NR_BLDC]; //Distance between gActual_s[NR_BLDC] and gTarget_s
unsigned int old_s[NR_BLDC]; //Position before starting to new destination
unsigned int ramp_s[NR_BLDC]; //Duration of ramp(accelerate/decelerate) in Signals
unsigned int count_dt[NR_BLDC]; //Actual nr of PWM ISR timer calls
uint8_t dc_max[NR_BLDC]; //Maximal Duty Cycle set to reach the destination
} POSITIONING;

POSITIONING *gPOS;

当我写入 *gUART 中的 rx_flag 或 rx_length 时,它会以某种方式更改 *gPOS 结构中的 distance_s[0] 的内容(执行下面代码部分中的两行之一时会发生错误)。 i 的类型为 uint8_t 并且在限制范围内。

            gUART->rx_length = i;                       //set receive byte length
gUART->rx_flag = 1; //Indicate that data ready for use

我不知道这是如何发生的,因为即使它是溢出,两个结构至少在 bss 部分中被多个字节分隔。

任何如何查找错误的技巧/想法。

提前谢谢

最佳答案

由于您没有显示更多代码,因此我必须做出两个假设:带有前缀 g 的变量是全局变量,并且您不初始化这些指针(即使它们指向任何地方)。

未初始化的全局变量由编译器零初始化。对于指针来说,这意味着它们被初始化为NULL,这意味着两个指针都指向NULL。取消引用 NULL 指针会导致 undefined behavior .

在您的具体情况下,您非常幸运,整个应用程序不会崩溃和烧毁,更具体地说,因为两个指针都指向NULL,所以它们都指向相同的内存,这意味着更改一种结构将改变两者。

要么您需要实际使指针指向某个地方,要么根本不将它们声明为指针。

关于c - 溢出?找不到来源,奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28083848/

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