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

时间:2018-09-26 10:29:05

标签: c++ windows trayicon

我具有从文件加载和获取图标的功能,如下所示:

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函数时,有时会在函数末尾返回值时崩溃:

  

返回iter->秒;

我已通过调用_loadIconFromFiles函数来验证并确保已加载图标。

有人知道这个问题的可能根源是什么吗?

1 个答案:

答案 0 :(得分:0)

m_map_icons.find()可能会出错。如果m_map_icons为空,则可能是这种情况。您可以通过检查以WindowSysTray::getIconFromFile开头: if (m_map_icons.size() == 0) return 0;