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