簡體   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