你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
积分商城
每日签到
结构体指针初始化的问题
[复制链接]
watercici
提问时间:2018-6-1 11:05 /
阅读主题, 点击返回1楼
赞
0
收藏
0
评论
34
分享
发布时间:2018-6-1 11:05
请先
登录
后回复
34个回答
STM1024
回答时间:2018-6-1 15:49:38
a0a.1 32b0c
换calloc试试?
赞
0
评论
回复
支持
反对
watercici
回答时间:2018-6-1 16:28:41
a0a.1 32b0c
本帖最后由 watercici 于 2018-6-1 16:42 编辑
stm1024 发表于 2018-6-1 15:49
换calloc试试?
不行,但是换了这个函数后我把结构体中的最后一个字节去掉就能执行成功。
我查了一下错误的原因,是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
赞
0
评论
回复
支持
反对
watercici
回答时间:2018-6-1 17:30:51
a0a.1 32b0c
结贴:错误找到了!
在网上看到一段话:
“昨天在修改自己的代码的时候,碰到了malloc函数内存分配失败,上网翻了翻,一个很可能的原因是之前的代码出现了越界操作,导致malloc分配函数所涉及的一些信息被破坏。在这个思想的指导下,今天又是郁闷了一整天,来来回回看自己的代码。又加不断的调试,终于发现自己的代码中有一个malloc分配的内存大小为0,不是自己预想的大小,而之后的代码又按预想的大小对内存进行了操作,导致了下一个malloc无法分配内存。
总结自己的问题,如果下一次再碰到这样的问题,就要查从不能分配的那个malloc函数开始往回找最近的那个能分配的malloc,出问题的代码应该就在这部分,很可能的原因就是指针越界,对未知的内存进行了操作,导致了malloc不能继续分配内存。”
于是就看了看前面,发现造成这个问题的原因是,在分配空间之前,我调用了结构体中的元素。
谢谢给位的帮助,受益匪浅!
评分
参与人数
1
蝴蝶豆
+2
收起
理由
zero99
+ 2
结贴奖励
查看全部评分
赞
0
评论
回复
支持
反对
STM1024
回答时间:2018-6-2 15:26:30
a0a.1 32b0c
这个坑真没谁去注意。把0赋给malloc能得到一个合法的指针
评分
参与人数
1
蝴蝶豆
+2
收起
理由
zero99
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
flank
回答时间:2018-6-12 13:27:34
a0a.1 32b0c
看来malloc使用要谨慎
赞
0
评论
回复
支持
反对
1
2
3
/ 3 页
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
不行,但是换了这个函数后我把结构体中的最后一个字节去掉就能执行成功。
我查了一下错误的原因,是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
在网上看到一段话:
“昨天在修改自己的代码的时候,碰到了malloc函数内存分配失败,上网翻了翻,一个很可能的原因是之前的代码出现了越界操作,导致malloc分配函数所涉及的一些信息被破坏。在这个思想的指导下,今天又是郁闷了一整天,来来回回看自己的代码。又加不断的调试,终于发现自己的代码中有一个malloc分配的内存大小为0,不是自己预想的大小,而之后的代码又按预想的大小对内存进行了操作,导致了下一个malloc无法分配内存。
总结自己的问题,如果下一次再碰到这样的问题,就要查从不能分配的那个malloc函数开始往回找最近的那个能分配的malloc,出问题的代码应该就在这部分,很可能的原因就是指针越界,对未知的内存进行了操作,导致了malloc不能继续分配内存。”
于是就看了看前面,发现造成这个问题的原因是,在分配空间之前,我调用了结构体中的元素。
谢谢给位的帮助,受益匪浅!
评分
查看全部评分
评分
查看全部评分