2009-07-28 54 views
0

我試圖用C++創建一個win32 dll。它有一張全球宣佈的地圖。但是,當我嘗試訪問使用DLL的地圖時,它給出的運行時錯誤:WindowsError:異常:訪問衝突讀取0x00000008。如何解決它?使用dll映射時訪問衝突錯誤

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

的的urllib是一個類。

錯誤次數:url_container[ucid] = urllib();

在上述點出現的誤差。

回答

0

這段代碼

url_container[ucid] = urllib() 

被調用靜態初始化器爲全球其他對象?如果是這樣,則不能保證url_container已經在其他全局對象之前被建立。

使用的存取函數時創建的對象來控制,或使用一個單獨的庫像boost singleton

訪問者例如

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

順便說一句,我建議你儘量避免全局對象。正如你可以花費剩餘的時間調試這樣的問題。最終,一個全局對象的構造將依賴於另一個等,並且構造的順序沒有被定義,因此它可能在一個平臺/編譯器上工作,而在另一個平臺/編譯器上失敗。

1

我認爲urllib是一種類型或類而不是函數?

它看起來不像你的代碼有什麼問題。在調試器中,當異常發生時,你在調用堆棧上看到了什麼?確切地看到它進入訪問衝突的位置會很有幫助。

+0

urllib是一類。並且在創建對象時發生異常。 – Vicky 2009-07-28 11:32:46

0

你可能想嘗試插入它,如果它不在地圖上存在的是,雖然你有什麼應該罰款

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

我也是這樣試過的。仍然它給出了相同的錯誤 – Vicky 2009-07-28 11:36:15

0

我想唯一合理的方法來解決訪問衝突是使用調試器。