首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >溢出?找不到源头,奇怪

溢出?找不到源头,奇怪
EN

Stack Overflow用户
提问于 2015-01-22 08:05:48
回答 1查看 21关注 0票数 0

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

代码语言:javascript
复制
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的内容(在执行下面代码部分中的两行之一时发生错误)。我是uint8_t类型的,在限制范围内。

代码语言:javascript
复制
            gUART->rx_length = i;                       //set receive byte length
            gUART->rx_flag = 1;                         //Indicate that data ready for use

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

任何如何发现错误的技巧/想法。

提前谢谢你

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-22 08:14:32

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

未初始化的全局变量由编译器初始化为零。对于指针,这意味着它们被初始化为NULL,这意味着两个指针都指向NULL。删除NULL指针将导致http://en.wikipedia.org/wiki/Undefined_behavior

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28083848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档