繁体   English   中英

在DLL中使用地图时出现访问冲突错误

[英]access violation error when using map in dll

我试图使用c ++创建一个win32 dll。 它具有全局声明的地图。 但是,当我尝试使用dll访问地图时,给出了运行时错误: WindowsError:异常:访问冲突读取0x00000008 怎么解决呢?

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

urllib是一个类。

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

错误发生在以上几点。

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

看起来您的代码似乎没有任何问题。 在调试器中,发生异常时,您在调用堆栈上看到什么? 准确了解访问冲突正在何处运行将很有帮助。

如果地图中尚不存在它,您可能想尝试将其插入,尽管您应该拥有的还不错

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

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

这个代码吗

url_container[ucid] = urllib()

在另一个全局对象的静态初始化程序中被调用? 如果是这样,没有这样的保证url_container已经在全球其他对象之前被consutructed。

使用访问器函数控制何时创建对象,或使用单例库(如boost singleton)

存取器示例

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM