为什么从文件获取图标时应用程序有时会崩溃?

Why app sometimes crashes when getting Icon from file?

本文关键字:崩溃 应用程序 为什么 文件 获取 图标      更新时间:2023-10-16

我有从文件中加载和获取图标的函数,如下所示:

std::map<wstring, HICON> m_map_icons;
void WindowSysTray::_loadIconFromFiles()
{
...
for (int i = 0; i < 3; ++i) {
wstring temp = path + trayList[i];
HICON hIcon = NULL;
Gdiplus::Bitmap bitmap(temp.c_str(), false);
bitmap.GetHICON(&hIcon);
pair<wstring, HICON> _pair = make_pair(trayList[i], hIcon);
m_map_icons.insert(_pair);
}
}
HICON WindowSysTray::getIconFromFile(const wchar_t* iconPath)
{
auto iter = m_map_icons.find(wstring(iconPath));
if (iter == m_map_icons.end()) {
return NULL;
}
else {
return iter->second; // ---Issue here---
}
}
...
hIcon = getIconFromFile(L"tray.png");
if (hIcon)
{
TrayIcon.SetIcon(hIcon);
}
...

当我调用getIconFromFile函数时,它有时会崩溃,同时在函数末尾返回值:

返回迭代>秒;

我验证并确保我之前通过调用函数加载了 Icon_loadIconFromFiles

有谁知道这个问题可能的根本原因是什么?

m_map_icons.find()可能会出错。如果m_map_icons为空,则可能出现这种情况。您可以从检查开始WindowSysTray::getIconFromFileif (m_map_icons.size() == 0) return 0;