问题描述
view_dir.SmallImageList.Images.Add(GetFileIcon(f.FileType.Name,SHGFI.SmallIcon));
view_dir是ListView,SmallImageList已初始化,GetFileIcon是调用API获取图标的函数,f.FileType.Name不为空,这是基本情况然后问题来了当GetFileIcon()return了值之后,该行代码的下一句并没有执行,就再一次调用了GetFileIcon(),并且此时的第一个参数变成了null,第二个参数不变我在GetFileIcon()的return处,和该行代码的下一行代码处,都设置了断点。而f.FileType.Name我也检查过了,不为null。我用断点查看,执行顺序大概如此:GetFileIcon(".jpg",SHGFI.SmallIcon)↓returnicon↓GetFileIcon(null,SHGFI.SmallIcon)↓出错已经试过,如果在GetFileIcon()内增加第一个参数的判断,整体代码能正常执行但如果不增加判断则会出错,但第一个参数没找到过null的情况,只有在执行进去了之后才有null
解决方案
本帖最后由 dyx726 于 2015-08-05 08:57:31 编辑
解决方案二:
貌似问题找到了…是GetFileIcon()里获取到的icon没有释放内存导致内存混乱……?虽然我的ImageList引用着但貌似还是有问题,要用clone复制一份然后释放掉api的icon指针…
解决方案三:
GetFileIcon必须在外部释放。
时间: 2024-07-29 04:10:41