これは私をナットにしています。主にそれは時間の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
私は再コンパイル後に動作したので、修正したと思っていた1_55個のヘッダーがあるディレクトリの名前を変更しました。 一度、次にエラーが発生しました。それは本当の頭の傷つき手です。 – PhilD
いいえ、私は古い1_55ヘッダーとライブラリを吹き飛ばしましたが、同じ結果が残っています。 小さなテストアプリケーションを作成して再作成しようとしましたが、同じ動作をしません。私はそれが私が推測しているものを理解するまで、私のアプリケーションの一部をゆっくりと切らなければならないでしょう。 – PhilD
私はこの問題に関する他のアイデアはありません。なぜあなたが問題を解決すればいいのか教えてください。^ _^ – ERWIN