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

结构体指针初始化的问题

[复制链接]
watercici 提问时间:2018-6-1 11:05 /
本帖最后由 watercici 于 2018-6-1 11:08 编辑

结构体指针初始化的问题:
我定义了一个结构体:
typedef struct  
{
        float Test[10];
        u32 addr;
        u16 Count;
        u16 Safe_Cnt;
        u16 Danger_Cnt;  
        u16 Year;
        u8 Month;
        u8 Day;
        u8 Hour;
        u8 Minute;
        u8 Seconds;
        u8 TestResualt;
        u8 TestState;
}RecordStruct; //共59个字节

RecordStruct *OutData;

初始化的时候给他分配内存:
OutData = (RecordStruct*)malloc(sizeof (RecordStruct));
这样调试程序的时候总是会在初始化分配内存的时候进入硬件中断,错误提示是“IMPRECISERR"不精确数据总线错误,但是如果我定义的时候将结构体中的最后一个字节“u8 TestState”去掉的话程序就能够正常执行,不会进入到硬件中断,这是为什么呢?

在线等,谢谢!


一开始我以为是字节数为奇数的原因,可是我又加了一个u8 stuff;也不行
收藏 评论34 发布时间:2018-6-1 11:05

举报

34个回答
Inc_brza 回答时间:2018-6-1 11:13:33
本帖最后由 Inc_brza 于 2018-6-1 11:15 编辑

先设置对齐看看,另外得是,你这个应该是占用60个字节
andeyqi 回答时间:2018-6-1 11:13:54
跟下malloc函数看下,是不是bss段内存空间不够啦。
watercici 回答时间:2018-6-1 11:23:18
andeyqi 发表于 2018-6-1 11:13
跟下malloc函数看下,是不是bss段内存空间不够啦。

如果BSS段不够的话,编译应该会提示错误吧,我的编译没有问题
andeyqi 回答时间:2018-6-1 11:26:53
本帖最后由 andeyqi 于 2018-6-1 11:41 编辑

malloc 是动态分配的,编译的时候为什么会报错呢,又没有语法错误的。
andeyqi 回答时间:2018-6-1 11:30:17
watercici 发表于 2018-6-1 11:23
如果BSS段不够的话,编译应该会提示错误吧,我的编译没有问题

你的代码给bss分配的空间有多大,看你的现象像是只要malloc超过某个长度就出问题。如果可以的话  你看下malloc函数的返回是不是失败了,成功之后再使用这段内存,没成功就是用肯定会有问题。
watercici 回答时间:2018-6-1 11:31:28
andeyqi 发表于 2018-6-1 11:26
malloc 是动态分配的,编译的时候为什么会报错呢,有没有语法错误的。

是啊,malloc是动态分配,而BSS静态内存分配段,所以我认为和malloc没有关系。至于语法错误,我觉得应该没有,因为我之前的这个程序是成功的,我就是在原来的结构体上加了一个“u8 Test_State”;分配内存就出现了问题,我把heap_size的大小增大了也不行,而stact_size的大小为0x400足够了,我认为不用改了
watercici 回答时间:2018-6-1 11:35:41
andeyqi 发表于 2018-6-1 11:30
你的代码给bss分配的空间有多大,看你的现象像是只要malloc超过某个长度就出问题。如果可以的话  你看下m ...

那我怎么看跟踪malloc这个函数呢,或者怎么看它的返回值,因为我找不到malloc这个函数的定义,但是我可以用,我也不知道为什么,网上查说是添加#include <malloc.h>,可是我添加了,但却说找不到这个文件。
lvpeng-1619958 回答时间:2018-6-1 11:36:20
堆太小了吗?不会刚好差一个u8的大小吧?!
watercici 回答时间:2018-6-1 11:38:08
andeyqi 发表于 2018-6-1 11:30
你的代码给bss分配的空间有多大,看你的现象像是只要malloc超过某个长度就出问题。如果可以的话  你看下m ...

还有我想问一下,malloc和BSS断没有关系吧,不是应该和堆有关系吗,因为我刚刚在网上看到的,BSS断不是与定义的未初始化变量有关吗,而MALLOC和堆有关系吗?
1234下一页

所属标签

相似问题

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