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

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

[复制链接]
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

查看全部评分

bargagebaobei 回答时间: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居然是不一样的
bargagebaobei 回答时间: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

查看全部评分

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

评分

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

查看全部评分

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

评分

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

查看全部评分

12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版