我希望在一個進程中在共享內存段上分配數據,並在另一個進程中釋放它。跨進程內存管理
我使用以下行分配它在過程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後,我可以補充)
當我試着使用destroy_ptr(pData)
釋放它在PROC 2我招人煩一個惱人的異常:「未處理的異常在0x0000000000000000」 並嘗試使用deallocate(pData)
並沒有表現好。
當我從Proc1中釋放一切都很好時,它只是從Proc2中釋放出現問題。
任何想法?
該問題是由基類中的虛擬析構函數引起的。 注意自我:不要在共享內存上使用虛擬功能,虛擬方法表不是交叉過程。
我想感謝乍得。他正確地指出,我應該發佈相關的代碼,讓我仔細看看一個不起眼的基類。
使用'managed_memory_segment.construct'創建的對象應該用'managed_memory_segment.destroy '或'managed_memory_segment.destroy_ptr'釋放。沒有一個可重複使用的例子(或者更多的代碼),沒有人能夠幫助你。 –
Chad
對,我會在明天早上回到辦公室時嘗試添加更全面的示例。至於「破壞」的建議,這顯然不適用於anonymous_instance。也許我應該重新思考我的前提,並轉向命名實例。 –
Eyal