2012-12-05 29 views
4

我有蟒-C++接口一塊的C++代碼,需要與Python列表作爲其輸入重複調用。我發現即使是虛擬的過程如下導致內存泄漏:Python-C++接口中的內存泄漏?

在蟒蛇:

a = [1.0]*1000 
for c in range(1000): 
    dummy(a, 1) 

在C++:

static PyObject* dummy(PyObject* self, PyObject* args) { 
    Py_RETURN_NONE; 
} 

我在這裏錯過任何東西,因此引入了內存泄漏?

+3

我不這麼認爲......你確定這是一個內存泄漏,而不僅僅是GC還沒有運行? –

+0

其實,我試圖定期手動GC添加到代碼,但記憶仍然很快炸燬。 – Chao

+0

我沒有在這裏看到[tag:swig]鏈接。我錯過了什麼嗎? – Flexo

回答

1

沒有那麼好,你傳遞給你的c方法的對象只能借用,也就是說你不必在返回之前減少對象的refcount(事實上這將是一個壞的,錯誤的bug) 。

參見例如documentation的這一部分:

注意,其被提供給所述 呼叫者任何Python對象引用被借用的引用;不要減去他們的參考 !

你是如何即便確定您有內存泄漏?這很可能是你的問題。