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

结构体指针初始化的问题

[复制链接]
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管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版