2016-12-22 3 views
0

これは私をナットにしています。主にそれは時間の90%が起こるので、時々私はそれによって右に得ることができます。Windowsで1_55から1_62に更新した後にLIBでboost :: asio :: ip :: udp :: socketをクラッシュさせる

ここに裏話があります。私はMSVC++ 2012を使用して1_55をコンパイルしましたが、私たちはかなり長い間それを使用していました。私たちは最終的に2013年のツールチェーンに切り替える予定で、すべてをアップグレードすることを任されています。

最新のboost 1_62を取得し、2013 32ビットツールセットで再コンパイルしました。私が抱えている問題は、再コンパイルしたので、私はudpソケットを作成する際にクラッシュすることです。

私は私たちが開発したライブラリを静的にリンクしています。私はそのライブラリを継承し、UDPポートを開くメソッドを呼び出します。だけで正常に動作し

 boost::asio::io_service test; 
     boost::asio::ip::udp::socket socket(test); 

     this->StartListen(); 

私は、次のいるクラスのコンストラクタで:私は最高のillistrateにこの点を私のコードを変更した例のため

 boost::asio::ip::udp::endpoint listen_endpoint(
     boost::asio::ip::address::from_string(m_bindAddress), m_usPort); 
    m_mcast_endpoint.reset(new boost::asio::ip::udp::endpoint(
     boost::asio::ip::address::from_string(m_sendAddress), m_usPort)); 
    m_socket.reset(new boost::asio::ip::udp::socket(m_ioservice)); 

これはこれでm_socket.resetに吹く::Interestly十分な私はスタートですぐにする例を変更したとき

Unhandled exception at 0x77D798C1 (ntdll.dll) in program.exe: 0xC0000374: A heap has been corrupted (parameters: 0x77DAC8D0). 

StartListenでは、私は次のことを持っている初期化を呼び出しますこのように聞く:

void Multicast::StartListen() 
{ 
    boost::asio::io_service take2; 
    boost::asio::ip::udp::socket socket_test(take2); 

を私はこれを取得:

Unhandled exception at 0x6384D4A1 in program.exe: 0xC00001A5: An invalid exception handler routine has been detected (parameters: 0x00000003). 

ここで何が起こっているのか分かりません。私は

b2.exe --build型=完全--stagedir =のbin32アドレス-モデル= 32段階

でブーストを構築し、すべてが正しいようです。私は何が欠けていますか?

もう少し進歩しました。この問題は、ライブラリでブーストUDPソケットを作成し、ライブラリを呼び出すコードにブーストUDPソケットを作成した場合に発生します。

So: 
Main 
| 
| Create UDP Socket 
| 
CALL LIBRARY 
| 
| 
| Create UDP SOCKET <--- Heap corruption 

答えて

0

のLIBSとのリンクの問題はBoost.ASIOとした2つの別々のプロジェクトから、それを使って。両方のプロジェクトプロパティにBOOST_ASIO_DISABLE_IOCP定義を置くと、問題は解決されました。おそらく、IOCPを使用する "より良い方法"がありますが、これは今後これを解決します。

1

たぶん、あなたは1_55のヘッダでコンパイルしたが1_62

+0

私は再コンパイル後に動作したので、修正したと思っていた1_55個のヘッダーがあるディレクトリの名前を変更しました。 一度、次にエラーが発生しました。それは本当の頭の傷つき手です。 – PhilD

+0

いいえ、私は古い1_55ヘッダーとライブラリを吹き飛ばしましたが、同じ結果が残っています。 小さなテストアプリケーションを作成して再作成しようとしましたが、同じ動作をしません。私はそれが私が推測しているものを理解するまで、私のアプリケーションの一部をゆっくりと切らなければならないでしょう。 – PhilD

+0

私はこの問題に関する他のアイデアはありません。なぜあなたが問題を解決すればいいのか教えてください。^ _^ – ERWIN

関連する問題