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

结构体指针初始化的问题

[复制链接]
watercici 提问时间:2018-6-1 11:05 /
阅读主题, 点击返回1楼
收藏 评论34 发布时间:2018-6-1 11:05
34个回答
stm1024 回答时间:2018-6-1 15:49:38
换calloc试试?
watercici 回答时间:2018-6-1 16:28:41
本帖最后由 watercici 于 2018-6-1 16:42 编辑

不行,但是换了这个函数后我把结构体中的最后一个字节去掉就能执行成功。
我查了一下错误的原因,是malloc系统函数执行过程中出错了,但是原因没有找到。出错的地方是:绿色和黄色部分

                 malloc:
0x080073A4 B5F0      PUSH     {r4-r7,lr}
0x080073A6 300B      ADDS     r0,r0,#0x0B
0x080073A8 4D15      LDR      r5,[pc,#84]  ; @0x08007400
0x080073AA F0200107  BIC      r1,r0,#0x07
0x080073AE 2400      MOVS     r4,#0x00
0x080073B0 4A14      LDR      r2,[pc,#80]  ; @0x08007404
0x080073B2 E00F      B        0x080073D4
0x080073B4 6803      LDR      r3,[r0,#0x00]
0x080073B6 428B      CMP      r3,r1
0x080073B8 D30B      BCC      0x080073D2
0x080073BA 428B      CMP      r3,r1
0x080073BC D905      BLS      0x080073CA
0x080073BE 1A5E      SUBS     r6,r3,r1
0x080073C0 1843      ADDS     r3,r0,r1
0x080073C2 6847      LDR      r7,[r0,#0x04]  //R7的值在这里没有加载过来
0x080073C4 E9C36700  STRD     r6,r7,[r3,#0]
0x080073C8 E000      B        0x080073CC
0x080073CA 6843      LDR      r3,[r0,#0x04]
0x080073CC 6013      STR      r3,[r2,#0x00]
0x080073CE C002      STM      r0!,{r1}
0x080073D0 E004      B        0x080073DC
0x080073D2 1D02      ADDS     r2,r0,#4
watercici 回答时间:2018-6-1 17:30:51
结贴:错误找到了!
在网上看到一段话:
“昨天在修改自己的代码的时候,碰到了malloc函数内存分配失败,上网翻了翻,一个很可能的原因是之前的代码出现了越界操作,导致malloc分配函数所涉及的一些信息被破坏。在这个思想的指导下,今天又是郁闷了一整天,来来回回看自己的代码。又加不断的调试,终于发现自己的代码中有一个malloc分配的内存大小为0,不是自己预想的大小,而之后的代码又按预想的大小对内存进行了操作,导致了下一个malloc无法分配内存。
总结自己的问题,如果下一次再碰到这样的问题,就要查从不能分配的那个malloc函数开始往回找最近的那个能分配的malloc,出问题的代码应该就在这部分,很可能的原因就是指针越界,对未知的内存进行了操作,导致了malloc不能继续分配内存。”

于是就看了看前面,发现造成这个问题的原因是,在分配空间之前,我调用了结构体中的元素。
谢谢给位的帮助,受益匪浅!

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2 结贴奖励

查看全部评分

stm1024 回答时间:2018-6-2 15:26:30
这个坑真没谁去注意。把0赋给malloc能得到一个合法的指针

评分

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

查看全部评分

lakeadore 回答时间:2018-6-12 13:27:34
看来malloc使用要谨慎
1234

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版