[发明专利]一种动态内存中野指针的确定及定位方法在审
| 申请号: | 201810480467.9 | 申请日: | 2018-05-18 |
| 公开(公告)号: | CN108762920A | 公开(公告)日: | 2018-11-06 |
| 发明(设计)人: | 杨海峰 | 申请(专利权)人: | 四川斐讯信息技术有限公司 |
| 主分类号: | G06F9/50 | 分类号: | G06F9/50 |
| 代理公司: | 上海硕力知识产权代理事务所(普通合伙) 31251 | 代理人: | 郭桂峰 |
| 地址: | 610100 四川省成*** | 国省代码: | 四川;51 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 指针 动态内存 子单元 地址相关 数据发生 定位野 筛查 释放 | ||
本发明提供了一种动态内存中野指针的确定及定位方法,利用已被释放的动态内存正常情况是不会被使用的,即动态内存各子单元存入的数据是不会发生变化的,若发生变化,则说明程序中存在野指针。此外,之前操作中与该数据发生变化的子单元地址相关的函数持有该野指针;若操作或函数有多个,则该多个操作对应的函数或该多个函数都有可能持有该野指针,一一筛查该多个函数或多个操作的函数,则可以定位野指针。
技术领域
本发明涉及动态内存技术领域,尤其涉及一种动态内存中野指针的确定及定位方法。
背景技术
在C或C++语言开发程序时,最灵活的部分要数指针了。由指针引起的错误会带来意想不到的结果,引发各种动态内存问题,解决起来费时费力。
难以定位指针错误,并不是因为指针本身有错误,而是这些指针指向的地址不正确,如野指针或者空指针。通过这些错误的指针对动态内存进行读写访问时,读到的数据会不正确,写入的数据会造成其它模块的内存数据被破坏,严重时引起系统崩溃。
有鉴于此,动态内存中野指针的确定及定位方法实有必要。
发明内容
本发明的发明目的是提供一种动态内存中野指针的确定及定位方法,利用已被释放的动态内存正常情况是不会被使用的,即动态内存各子单元存入的数据是不会发生变化的,若发生变化,则说明程序中存在野指针。此外,之前操作中与该数据发生变化的子单元地址相关的函数持有该野指针;若操作或函数有多个,则该多个操作对应的函数或该多个函数都有可能持有该野指针,一一筛查该多个函数或多个操作的函数,则可以定位野指针。
为实现上述目的,本发明提供一种动态内存中野指针的确定方法,包括:
依程序中的内存分配请求分配动态内存,并将正常分配下的内存分配请求信息保存;
释放所述分配的动态内存后,在所释放的动态内存的各个子单元内写入预定数据;
再次分配所述释放的动态内存时,先检查所述动态内存各个子单元中的数据与相应子单元的预定数据是否一致;若存在一个或多个子单元不一致,则所述程序中存在野指针,若各子单元都一致,则所述程序中不存在野指针。
可选地,所述依内存分配请求分配动态内存时的动态内存是否可正常分配的判断方法为:分配前,检查动态内存各子单元内的数据与所述动态内存初始化时相应子单元存入的数据是否一致;若各子单元都一致,则所述动态内存可正常分配,若存在一个或多个子单元不一致,则所述动态内存不可正常分配。
可选地,所述保存的内存分配请求信息包括:所述动态内存各子单元地址相关的函数、以及所述函数所在的程序文件或所述程序文件的文件名。
可选地,所述保存的内存分配请求信息还包括:所述动态内存各子单元地址相关的函数在所述程序文件中所处的行的行号。
可选地,释放所述分配的动态内存后,还进行分配、释放动态内存的循环至少一次,检查所述动态内存各子单元中的数据与相应子单元的预定数据是否一致的再次分配为最后一次循环后的分配所述释放的动态内存;每次在所释放的动态内存对应子单元内写入的预定数据相同;
所述分配、释放动态内存的循环包括:
依程序中的内存分配请求分配动态内存,并将正常分配下的内存分配请求信息保存;
释放所述分配的动态内存后,在所释放的动态内存的各个子单元内写入预定数据。
可选地,所述释放动态内存时,还创建动态内存释放历史记录表,所述动态内存释放历史记录表用于:每次释放分配的动态内存时,存入前一步骤分配动态内存时保存的内存分配请求信息。
本发明还提供一种动态内存中野指针的定位方法,包括:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于四川斐讯信息技术有限公司,未经四川斐讯信息技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201810480467.9/2.html,转载请声明来源钻瓜专利网。





