Dies macht mich verrückt. Hauptsächlich, weil es in 90% der Fälle passiert, aber gelegentlich kann ich es richtig machen.Erstellen eines boost :: asio :: ip :: udp :: socket Absturz in LIB nach der Aktualisierung von 1_55 auf 1_62 unter Windows
Also hier ist die Hintergrundgeschichte. Ich hatte boost 1_55 mit MSVC++ 2012 kompiliert und wir hatten es schon eine ganze Weile benutzt. Wir schalten endlich auf die 2013 Toolchain um und ich wurde damit beauftragt, alles zu verbessern.
Ich wählte den neuesten Boost 1_62 und kompiliere mit dem 2013-32-Bit-Toolset. Das Problem, das ich habe, ist, dass jetzt, wo ich neu kompiliert habe ich einen Absturz beim Erstellen eines Udp-Sockets bekomme.
Also habe ich eine Bibliothek, die wir entwickelt haben, dass wir statisch verknüpfen. Ich erben von dieser Bibliothek und rufen eine Methode auf, die einen UDP-Port öffnet.
Aus Gründen des Beispiels ich meinen Code am besten verändert haben, diesen Punkt illistrate:
Im Klassenkonstruktor ich folgendes haben:
boost::asio::io_service test;
boost::asio::ip::udp::socket socket(test);
this->StartListen();
Das funktioniert gut. In Startlisten, nenne ich Init ich habe folgendes:
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));
Das sprengt auf dem m_socket.reset mit diesem:
Unhandled exception at 0x77D798C1 (ntdll.dll) in program.exe: 0xC0000374: A heap has been corrupted (parameters: 0x77DAC8D0).
Interestly genug, wenn ich das Beispiel änderte die unmittelbar in der Start zu sein hören wie folgt aus:
void Multicast::StartListen()
{
boost::asio::io_service take2;
boost::asio::ip::udp::socket socket_test(take2);
ich dieses:
Unhandled exception at 0x6384D4A1 in program.exe: 0xC00001A5: An invalid exception handler routine has been detected (parameters: 0x00000003).
Ich habe wirklich keine Ahnung, was hier vor sich geht. Ich baute Schub mit dem
b2.exe --build-type = komplettes --stagedir = bin32 Adresse-Modell = 32 Stufe
und alles in Ordnung zu sein scheinen. Was vermisse ich?
Nun, ich habe mehr Fortschritte gemacht. Das Problem tritt auf, wenn Sie einen Boost-UDP-Socket in einer Bibliothek erstellen und einen Boost-UDP-Socket im Code erstellen, der die Bibliothek aufruft.
So:
Main
|
| Create UDP Socket
|
CALL LIBRARY
|
|
| Create UDP SOCKET <--- Heap corruption
Dachte ich, das Verzeichnis umbenannt die 1_55 Header waren in. Was ich dachte, es repariert, wie es nach einer Neukompilierung funktionierte. Einmal, dann drücken Sie den Fehler das nächste Mal durch. Es ist ein echter Kopfschaber. – PhilD
Nein, ich blies die alten 1_55 Header und Bibliotheken weg, immer noch das gleiche Ergebnis. Ich habe eine kleine Testanwendung zusammengestellt, die versucht, sie neu zu erstellen, und sie zeigt nicht das gleiche Verhalten. Ich werde Teile meiner Bewerbung langsam wegschneiden müssen, bis ich herausgefunden habe, was es ist, denke ich. – PhilD
Ich habe keine anderen Ideen zu diesem Problem, sagen Sie mir, warum, wenn Sie das Problem lösen,^_^ – ERWIN