你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
jxbjxbjxb 提问时间:2018-3-30 11:37 /
简化描述:
我在程序中定义了如下类型的一个结构体:
typedef struct
{
      uint8_t*   Rxbuffer;
      uint8_t     Timer;
}Hardle_typedef;
然后用Hardle_typedef去定义一个变量,结果芯片没现象,改成如下形式就没问题了:
typedef struct
{
      uint8_t     Timer;
      uint8_t*   Rxbuffer;
}Hardle_typedef;

请问大神们这是踩了C语言指针的陷阱了吗?请帮忙解释一下。

收藏 评论10 发布时间:2018-3-30 11:37

举报

10个回答
废鱼 回答时间:2018-3-30 13:40:26
定义后,Rxbuffer是否进行了赋值?

评分

参与人数 1蝴蝶豆 +1 收起 理由
zero99 + 1

查看全部评分

琦子 回答时间:2018-3-30 11:40:48
结构体是一种自定义的数据类型,是创建变量的模板,不占用内存空间;结构体变量才包含了实实在在的数据,需要内存空间来存储。 所以我觉得你定义的没有问题 ,看看你的变量是怎么样的啊

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

jxbjxbjxb 回答时间:2018-3-30 11:46:45
bargagebaobei 发表于 2018-3-30 11:40
结构体是一种自定义的数据类型,是创建变量的模板,不占用内存空间;结构体变量才包含了实实在在的数据,需 ...

比如定义Hardle_typedef PE_Handle,然后程序中用了PE_Handle,经过编译发现上述两种结构体的情况占用的SRAM居然是不一样的
琦子 回答时间:2018-3-30 12:03:07
一般的内存分配都是连续性的分配块内存的,指针变量存的是将要跳转的空间地址,没有把开辟的地址赋给嵌套在内层的指针变量!这样跳转到的地址并不一定就在刚分配开辟的连续地址内,只有将开辟的内存地址写在指针变量里,才能让指针跳到指定的开辟的内存空间!
XinLiYF 回答时间:2018-3-30 12:38:07
本帖最后由 XinLiYF 于 2018-3-30 12:39 编辑
jxbjxbjxb 发表于 2018-3-30 11:46
比如定义Hardle_typedef PE_Handle,然后程序中用了PE_Handle,经过编译发现上述两种结构体的情况占用的S ...

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

可能你程序里面出现野指针了。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

maxtch 回答时间:2018-3-30 13:33:24
追踪一下代码吧,看看指针跑到哪里去了。估计是野指针,挂上调试器看一下堆栈应该能看得出。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

MrJiu 回答时间:2018-3-30 15:05:17
很显然把问题最关键的东西没有写明白。。。。那就是“然后用Hardle_typedef去定义一个变量”,定义变量和使用部分怎么个使用法?要知道指针可是要初始化才能使用的。。。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

七哥 回答时间:2018-3-30 15:14:07
你的两种定义,应该都是可以的。
关键不是定义出了问题,而是你用结构体的时候有问题。可是怎么用的,你又没有写。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

zhao.zhao 回答时间:2018-3-31 09:47:50
同意楼上的看法,定义结构体中的指针,只要语法没有错误,编译通过,应该没有问题;问题在你怎么用的,也许变成了野指针,出问题了

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

无薪税绵 回答时间:2018-4-3 15:25:09
定义没有问题,应该是指针操作溢出了,
导致Timer变量也被修改了。

建议楼主付上代码,
或者,给用到 Rxbuffer指针的变量下个断点,
并单步调试,看一下。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版