我有一个单身人士,那是一个图像管理器。当我尝试加载图像时,我以这种方式调用单例:
utils::CImageBuff* img4 = utils::CImageManager::getInstance()->loadFromFile("uswg.png");
并且,在 loadFromFile 方法中,我将图像存储到地图中:
m_imageMap[imageHashID].setHeight(ilGetInteger(IL_IMAGE_HEIGHT));
m_imageMap[imageHashID].setWitdh(ilGetInteger(IL_IMAGE_WIDTH));
m_imageMap[imageHashID].setBpp(ilGetInteger(IL_IMAGE_BPP));
....
问题是我收到内存访问错误。就像如果 m_imageMap 为 NULL o 初始化错误,因为在第一句中抛出异常。但正如我所说,是一个单例,所以我必须初始化地图。我在 VC++ 2008 中开发。它可能是一个错误的编译/.obj 文件?
昨天运行良好
一些忠告?
编辑: m_imageMap 的声明非常简单:
typedef std::map<unsigned int,utils::CImageBuff> t_imageMap;
作为附加信息,生成的异常位于文件 output.c 的第 1643 行。
编辑好吧,我对这个案子非常失望。我已经更改了代码,所以现在该类不再是单例了。现在只有 m_imageMap 是静态的,可以让所有加载的图像在任何地方都可见。但仍然以同样的方式失败。该错误是访问冲突。此外,如果我通过此代码更改所有方法代码:
utils::CImageBuff im;
m_imageMap[1] = im; // fails here
return &im;
仍然失败。就像地图为空或以任何方式锁定,甚至初始化错误,但我不知道。你可以帮帮我吗?
如果您需要更多代码,我会粘贴,但我认为这三行代码崩溃会简化问题。
编辑:终于解决了最后我改变了
std::map<unsigned int,utils::CImageBuff>
到
std::map<unsigned int,utils::CImageBuff*>
现在它可以工作了。现在我只需要考虑一个删除静态 std::map 指针内容的方法。
非常感谢大家