[英]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.