Я хочу выделить данные в сегменте общей памяти в одном процессе и освободить их в другом.
Я выделяю его в процессе 1 (Proc1), используя следующую строку: new_Class* pData = managed_windows_shared_memory_segment.construct<new_Class>(anonymous_instance) ()
Затем я преобразовываю указатель в дескриптор get_handle_from_address(pData)
, передаю его другому процессу (Proc2), преобразовываю его обратно в указатель static_cast<new_Class*>managed_windows_shared_memory_segment.get_address_from_handle(handle)
и пытаюсь освободить его там. (после того, как Proc1 умер, я мог бы добавить)
когда я пытаюсь освободить его в процедуре 2 с помощью destroy_ptr(pData)
, я получаю надоедливое раздражающее исключение: «Необработанное исключение по адресу 0x00000000000000000», и попытка использовать deallocate(pData)
не лучше.
когда я освобождаю от Proc1, все хорошо, только освобождение от Proc2 кажется проблематичным.
Любые идеи?
Проблема была вызвана виртуальным деструктором в базовом классе. Примечание для себя: не используйте виртуальные функции в общей памяти, таблица виртуальных методов НЕ является кросс-процессом.
Я хотел бы поблагодарить Чада. Он правильно указал, что я должен опубликовать соответствующий код, который заставил меня поближе взглянуть на малоизвестный базовый класс.
managed_memory_segment.construct<MyType>
, должны быть освобождены с помощьюmanaged_memory_segment.destroy<MyType>
илиmanaged_memory_segment.destroy_ptr
. Без небольшого воспроизводимого примера (или дополнительного кода для просмотра) никто не сможет вам помочь. - person Chad   schedule 20.07.2015