![shequ.stmicroelectronics.cn](./template/st_v1/static/img/logo2.png)
本帖最后由 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;也不行 |
先设置对齐看看,另外得是,你这个应该是占用60个字节
如果BSS段不够的话,编译应该会提示错误吧,我的编译没有问题
malloc 是动态分配的,编译的时候为什么会报错呢,又没有语法错误的。
你的代码给bss分配的空间有多大,看你的现象像是只要malloc超过某个长度就出问题。如果可以的话 你看下malloc函数的返回是不是失败了,成功之后再使用这段内存,没成功就是用肯定会有问题。
是啊,malloc是动态分配,而BSS静态内存分配段,所以我认为和malloc没有关系。至于语法错误,我觉得应该没有,因为我之前的这个程序是成功的,我就是在原来的结构体上加了一个“u8 Test_State”;分配内存就出现了问题,我把heap_size的大小增大了也不行,而stact_size的大小为0x400足够了,我认为不用改了
那我怎么看跟踪malloc这个函数呢,或者怎么看它的返回值,因为我找不到malloc这个函数的定义,但是我可以用,我也不知道为什么,网上查说是添加#include <malloc.h>,可是我添加了,但却说找不到这个文件。
还有我想问一下,malloc和BSS断没有关系吧,不是应该和堆有关系吗,因为我刚刚在网上看到的,BSS断不是与定义的未初始化变量有关吗,而MALLOC和堆有关系吗?