最近在使用duilib开源库实现图片查看工具软件ImageViewer,调试时发现,程序关闭时访问了0xfeeefeee内存地址,触发内存访问违例,导致了软件崩溃。本文分享一下这一问题的排查过程。
1、问题描述
点击Imageviewer工具软件主窗口右上角的关闭按钮,会触发Imageviewer程序的退出流程,紧接着Imageviewer进程就退出了。结果在调试时发现,点击主窗口的关闭按钮后居然产生了崩溃,且崩溃是必现的。
崩溃时的提示如下:
从图中可以看出,是访问了0xfeeefeee内存地址,产生了内存访问违例崩溃。内存地址0xfeeefeee位于内核态地址范围中,用户态的程序是禁止访问的,所以产生了内存访问违例的崩溃。
以前我们多次讲过0xcccccccc、0xcdcdcdcd和0xfeeefeee这几个常见的特殊值,如下所示:
即本例中0xfeeefeee含义是:Debug下的程序在调用HeapFree接口将堆内存释放后,系统会将释放的堆内存中的内容置为0xfeeefeee。所以当我们看到是访问0xfeeefeee内存地址触发的内存访问违例,我们的第一反应应该是程序可能访问了已经释放的内存了。
<版权声明:本文为chenlycly原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。