簡體   English   中英

使用socketio-client-c ++和boost asio io_service時的訪問沖突異常

[英]Access violation exception when using socketio-client-c++ and boost asio io_service

我正在嘗試將boost asio庫(1.61)中的io_service與socketio-client-c ++一起使用,但是我的代碼引發了訪問沖突異常,經過數小時的調試,我無法弄清楚是什么原因。 在win_mutex.hpp中的以下位置引發了異常:

void lock()
{
 -> ::EnterCriticalSection(&crit_section_);
}

代碼很簡單:

int main(int argc, char* argv[]) {
    boost::asio::io_service io_service;
    auto io_service_work = std::make_shared<boost::asio::io_service::work>      (io_service);

    sio::client client_;
    client_.connect("http://localhost:1337");

    // io_service.run();
}

我想從main使用io_service,socketio在內部也使用io_service,這可能是問題的原因。

您可以在此處下載包含socketio源代碼 和二進制 文件的完整項目: http ://stackoverflow-sehe.s3.amazonaws.com/7f1afa6a-883f-4941-8371-31ccbd8514a5/socket-io.zip¹

有什么建議嗎?

¹鏈接已編輯; 鏈接(以前是88M,現在是443k)

因為該行僅使用某物的地址調用公共Win32 API, 所以所有可能導致這種情況的發生是當this指向隨機某物時(例如,破壞的win_mutex ,其他東西,受保護的內存甚至是nullptr)。

這表示未定義行為 UB有數不勝數的可能來源,您的代碼不足以得出任何結論。 但是在Asio中,有99%的時間是由於對象的保留時間不夠長而無法完成異步操作所致。

我已將socketio項目轉換為Dll,關閉了boost自動鏈接,並手動添加了libboost_system-vc140-mt-gd-1_61.lib作為附加依賴項。 然后代碼按預期工作。

但是,如果我將socketio項目切換回靜態庫,則會出現與問題中所述相同的症狀。

請在此處檢查基於Dll的項目文件: http : //ginf.hu/socketio/socketiotest.zip

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM