簡體   English   中英

我認為python正在覆蓋我的vtable(C ++擴展)

[英]I think python is overwriting my vtable (c++ extension)

我正在編寫一個C ++ python擴展,並且每當我(從C ++)調用某個類的虛擬繼承方法(也就是PyObject(即它具有PyObject_HEAD))時,我就一直經歷着SIGSEGV。

我終於想起python對C ++一無所知。 果然,GCC在我對象的前4個字節中放置了一個vtable指針(您可以知道,因為PyObject_HEAD的第一個字段從對象地址偏移了4個字節)。 當python INCREFs對象時,它實際上是在更改vtable指針。

我的問題:該怎么解決? 將虛擬方法移至子類可以解決該問題,但似乎失敗了。 還有其他想法/經歷嗎?

(mingw32 / Windows 7上的Python 2.7,GCC 4.7.2)

Python不了解C ++,但是了解結構。 因此,讓Python調用創建結構的純C函數。 相反,該結構具有指向C ++對象的指針。 這樣,Python可以看到純C接口,但是C接口的實現會創建一個私有內部對象。

我們實際上是在我的一個項目中執行此操作的。 它可以工作,並且非常便攜。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM