在dll中使用map时出现访问冲突错误

时间:2009-07-28 11:22:58

标签: c++ dll

我尝试使用c ++创建一个win32 dll。它有一个全局声明的地图。但是当我尝试使用dll访问地图时,它会给出一个运行时错误: WindowsError:exception:access violation reading 0x00000008 。怎么解决?

声明:static map<int,urllib> url_container;

urllib是一个类。

错误发生:url_container[ucid] = urllib();

错误发生在上述点。

4 个答案:

答案 0 :(得分:1)

我假设urllib是一个类型或类而不是函数?

您的代码看起来没有任何问题。在调试器中,当异常发生时,您在调用堆栈上看到了什么?查看它在访问冲突中的确切位置会很有帮助。

答案 1 :(得分:0)

如果地图中不存在,您可能想尝试插入它,虽然您拥有的应该没问题

url_container.insert ( pair<int,urllib>(ucid,urllib()) );

答案 2 :(得分:0)

我想解决访问冲突的唯一合理方法是使用调试器。

答案 3 :(得分:0)

这段代码

url_container[ucid] = urllib()

在另一个全局对象的静态初始化程序中调用?如果是这样,则无法保证在另一个全局对象之前已经使用url_container

使用访问者函数来控制创建对象的时间,或使用像boost singleton这样的单例库

访问者示例

map<int,urllib> & get_url_container()
{
    static map<int,urllib> url_container;
    return url_container
}

顺便说一下,我建议你尽量避免使用全局对象。因为你可以用你的余生来调试这样的问题。最终,一个全局对象的构造将取决于另一个等,并且未定义构造的顺序,因此它可能在一个平台/编译器上工作而在另一个平台/编译器上失败。