OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5671|回复: 13

如何处理malloc留下的野指针?

[复制链接]

4

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
299
金钱
299
注册时间
2014-10-26
在线时间
29 小时
发表于 2014-12-16 17:38:05 | 显示全部楼层 |阅读模式
5金钱
发现使用NVIC_SystemReset不能清空内存数据,需要人工打扫malloc留下的野指针,想到的方法1:清空堆的数据,这个需要知道堆的起始地址;2:有没能复位内存的复位方法?

PS:独立看门狗是打开的,STM32 + IAR

最佳答案

查看完整内容[请看2#楼]

就不应该出现野指针。。。。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-12-16 17:38:06 | 显示全部楼层
就不应该出现野指针。。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
299
金钱
299
注册时间
2014-10-26
在线时间
29 小时
 楼主| 发表于 2014-12-17 00:28:06 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
看门狗复位的时候会产生一些还没来得及清除的指针
回复

使用道具 举报

4

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
299
金钱
299
注册时间
2014-10-26
在线时间
29 小时
 楼主| 发表于 2014-12-17 09:52:35 | 显示全部楼层
看了http://www.openedv.com/posts/list/0/24152.htm,突然明白了,在IAR下,进入main的时候获取MSP,清理的时候把MSP后面的数据给清零
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-12-17 23:10:22 | 显示全部楼层
回复【3楼】LearningASM:
---------------------------------
复位后,所有数据归零。你不用担心任何问题。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
299
金钱
299
注册时间
2014-10-26
在线时间
29 小时
 楼主| 发表于 2014-12-22 10:56:24 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
特意测试了一下

在启动的时候:
u32 *dat_t;
Heap_Head = __get_MSP();

for(dat_t = (u32*)Heap_Head;dat_t < (u32*)0x20004FFF;dat_t+=4){
printf("%0.2x",*dat_t);
}

接下来延时1秒,到重启

for(dat_t = (u32*)Heap_Head;dat_t < (u32*)0x20004FFF;dat_t+=4){
*dat_t = 0x01234567;
}
NVIC_SystemReset();


结果发现输出的数据是:
20005008400380123000012345671012345671234567...........................................................................................................省略N个
回复

使用道具 举报

4

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
299
金钱
299
注册时间
2014-10-26
在线时间
29 小时
 楼主| 发表于 2014-12-22 11:13:00 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
试了一下独立看门狗复位,也是不会清空内存的
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-12-22 19:40:51 | 显示全部楼层
回复【7楼】LearningASM:
---------------------------------
改天我写个代码试试吧。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

1446

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2256
金钱
2256
注册时间
2010-12-16
在线时间
206 小时
发表于 2014-12-22 21:31:22 | 显示全部楼层
1. 本来申请回来的空间就应该先初始化再用 , 编译器也不保证整个堆都会在复位后初始化 .

2. 如果仅仅为了清除空间 , 而没有其他由于清除空间而引起的其他操作 , 在单片机里一般可以忽略 , 不上操作系统就没有程序退出这么一说 .
技术讨论请发帖 , 需要我回复请点左下的 < 回复 > 让系统通知我 . 本人不通过其他方式返回任何参数.
回复

使用道具 举报

4

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
299
金钱
299
注册时间
2014-10-26
在线时间
29 小时
 楼主| 发表于 2014-12-23 10:28:14 | 显示全部楼层
回复【9楼】shihantu:
---------------------------------
回复1、申请回来的空间的确是先初始化再使用
回复2、如果是malloc分配的空间,重启后不清除,岂不是变成野指针了?

意外的发现是,对于只声明大小未初始化的变量,重启后数据不丢失,尤其是看门狗复位的时候,前面的一些工作可以继续,不用从头来过
回复

使用道具 举报

2

主题

1446

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2256
金钱
2256
注册时间
2010-12-16
在线时间
206 小时
发表于 2014-12-23 12:13:33 | 显示全部楼层
回复【10楼】LearningASM:
---------------------------------
2. 重启后 , 编译器的初始化代码会初始化堆结构 , 用户代码的指针无意义 , 连野指针的意义都不存在 .

3. 编译器不保证重启后普通内存区的数据不丢失 , 玩玩可以 , 想利用这个小技巧是会吃亏的 .
技术讨论请发帖 , 需要我回复请点左下的 < 回复 > 让系统通知我 . 本人不通过其他方式返回任何参数.
回复

使用道具 举报

4

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
299
金钱
299
注册时间
2014-10-26
在线时间
29 小时
 楼主| 发表于 2014-12-23 17:01:39 | 显示全部楼层
回复【11楼】shihantu:
---------------------------------
俺在5L、6L的已经测试说明,在IAR环境下,重启后 , 编译器的初始化代码并没有初始化堆的数据
回复

使用道具 举报

2

主题

1446

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2256
金钱
2256
注册时间
2010-12-16
在线时间
206 小时
发表于 2014-12-23 18:40:58 | 显示全部楼层
回复【12楼】LearningASM:
---------------------------------
10L没有说初始化堆 < 数据 > , 只是说初始化堆 < 结构 > . 理论上没有必要初始化 < 整个堆 > , 因为没有规定需要初始化 .

而且与申请回来的指针直接相关的是堆 < 结构 > , 指针指向的内容是否初始化与指针是否野指针没有联系 .
技术讨论请发帖 , 需要我回复请点左下的 < 回复 > 让系统通知我 . 本人不通过其他方式返回任何参数.
回复

使用道具 举报

4

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
299
金钱
299
注册时间
2014-10-26
在线时间
29 小时
 楼主| 发表于 2014-12-31 17:33:49 | 显示全部楼层
回复【13楼】shihantu:
---------------------------------
测试了一下,不停地malloc,然后重启,每次都是是一样的地址,确实按你所说,指针被清空了,不存在也野指针
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-27 12:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表