2016-02-04 5 views
0

есть простой кусок кода, который я перешел к основной функции образца приложения, чтобы избежать затрагивающего любых других частей приложения:исключения наддува: межпроцессное, разделяемая память объектого удаление

namespace bi = boost:interprocess; 

    bi::shared_memory_object::remove("shm"); 
    bi::named_mutex::remove("mtx"); 
    bi::named_condition::remove("cnd"); 

только первый рэйза линии исключение из внутреннего кода межпроцессного повышения: в windows_intermodule_singleton.hpp, 118 (v 1.60.0) bolded line - это место, где это происходит. Win64, VC v19, Windows 10

 ... 
    caster.addr = m; 
    BOOST_ASSERT((caster.addr_uint64 & boost::uint64_t(3)) == 0); 
    max_count = boost::uint32_t(caster.addr_uint64 >> 32); 
    **initial_count = boost::uint32_t(caster.addr_uint64);** 
    initial_count = initial_count/4; 
    //Make sure top two bits are zero 
    BOOST_ASSERT((max_count & boost::uint32_t(0xC0000000)) == 0); 
    //Set quasi-top bit 
    max_count |= boost::uint32_t(0x40000000); 
    ... 

Любая идея, почему это происходит? может ли это быть связано с моделью памяти x64?

ответ

0

это не исключение, моя невнимательность, скомпилирован со всеми настройками компилятора/RTC и это место выглядит как потенциальная потеря данных 8 байт до 4. отчетов Windbg (?): _RTC_Check_8_to_4

Смежные вопросы