一个指针加结构体的问题导致芯片不能运行

2019-07-14 18:28发布

简化描述:
我在程序中定义了如下类型的一个结构体:
typedef struct
{
      uint8_t*   Rxbuffer;
      uint8_t     timer;
}Hardle_typedef;
然后用Hardle_typedef去定义一个变量,结果芯片没现象,改成如下形式就没问题了:
typedef struct
{
      uint8_t     Timer;
      uint8_t*   Rxbuffer;
}Hardle_typedef;

请问大神们这是踩了C语言指针的陷阱了吗?请帮忙解释一下。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
跨界F16
1楼-- · 2019-07-15 02:34
 精彩回答 2  元偷偷看……
maqyun
2楼-- · 2019-07-15 06:36
跨界F16 发表于 2018-8-19 07:35
结构体是一种自定义的数据类型,是创建变量的模板,不占用内存空间;结构体变量才包含了实实在在的数据,需要内存空间来存储。 所以我觉得你定义的没有问题 ,看看你的变量是怎么样的啊

比如定义Hardle_typedef PE_Handle,然后程序中用了PE_Handle,经过编译发现上述两种结构体的情况占用的SRAM居然是不一样的
跨界F16
3楼-- · 2019-07-15 10:44
一般的内存分配都是连续性的分配块内存的,指针变量存的是将要跳转的空间地址,没有把开辟的地址赋给嵌套在内层的指针变量!这样跳转到的地址并不一定就在刚分配开辟的连续地址内,只有将开辟的内存地址写在指针变量里,才能让指针跳到指定的开辟的内存空间!
chm11
4楼-- · 2019-07-15 11:50
maqyun 发表于 2018-8-19 07:47
比如定义Hardle_typedef PE_Handle,然后程序中用了PE_Handle,经过编译发现上述两种结构体的情况占用的SRAM居然是不一样的

本帖最后由 XinLiYF 于 2018-3-30 12:39 编辑

默认情况下,都是四字节对齐的。指针是地址,占四个字节,uint8_t占一个字节。如果把uint8_t放到结构体的开头(第二个结构体)结构体占八个字节。如果放到结构体尾部(第一个结构体)结构体占五个字节。

可能你程序里面出现野指针了。
wang222221
5楼-- · 2019-07-15 17:47
追踪一下代码吧,看看指针跑到哪里去了。估计是野指针,挂上调试器看一下堆栈应该能看得出。
jfuwre
6楼-- · 2019-07-15 20:42
 精彩回答 2  元偷偷看……

一周热门 更多>