Это сводит меня с ума. В основном потому, что это происходит в 90% случаев, но иногда я могу справиться с этим.Создание boost :: asio :: ip :: udp :: socket сбой в LIB после обновления с 1_55 до 1_62 на Windows
Итак, вот предыстория. Я скомпилировал boost 1_55, используя MSVC++ 2012, и мы использовали его довольно долгое время. Мы переходим к toolchain 2013 года, и мне поручено обновить все.
Я решил захватить последний импульс 1_62 и перекомпилировать 32-битный набор инструментов 2013 года. Проблема, с которой я сталкиваюсь, заключается в том, что теперь, когда я перекомпилировал, я получаю сбой при создании сокета udp.
Итак, у меня есть библиотека, которую мы разработали, которую мы связываем статически. Я наследую эту библиотеку и вызываю метод, который открывает порт UDP.
Ради примера я изменил мой код, чтобы лучше illistrate этот момент:
В конструкторе класса я имею следующее:
boost::asio::io_service test;
boost::asio::ip::udp::socket socket(test);
this->StartListen();
Это работает просто отлично. В StartListen, я называю Init я следующее:
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 с этим:
Unhandled exception at 0x77D798C1 (ntdll.dll) in program.exe: 0xC0000374: A heap has been corrupted (parameters: 0x77DAC8D0).
достаточно занятно, когда я изменил пример, чтобы быть сразу в начале слушать, как это:
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