|
简化描述: 我在程序中定义了如下类型的一个结构体: typedef struct { uint8_t* Rxbuffer; uint8_t Timer; }Hardle_typedef; 然后用Hardle_typedef去定义一个变量,结果芯片没现象,改成如下形式就没问题了: typedef struct { uint8_t Timer; uint8_t* Rxbuffer; }Hardle_typedef; 请问大神们这是踩了C语言指针的陷阱了吗?请帮忙解释一下。 |
微信公众号
手机版
评分
查看全部评分
评分
查看全部评分
比如定义Hardle_typedef PE_Handle,然后程序中用了PE_Handle,经过编译发现上述两种结构体的情况占用的SRAM居然是不一样的
默认情况下,都是四字节对齐的。指针是地址,占四个字节,uint8_t占一个字节。如果把uint8_t放到结构体的开头(第二个结构体)结构体占八个字节。如果放到结构体尾部(第一个结构体)结构体占五个字节。
可能你程序里面出现野指针了。
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
关键不是定义出了问题,而是你用结构体的时候有问题。可是怎么用的,你又没有写。
评分
查看全部评分
评分
查看全部评分
导致Timer变量也被修改了。
建议楼主付上代码,
或者,给用到 Rxbuffer指针的变量下个断点,
并单步调试,看一下。
评分
查看全部评分