4

入力としてpythonリストを使用して繰り返し呼び出す必要があるpython-C++インターフェイスを備えたC++コードがあります。次のダミープロセスでもメモリリークが発生することがわかりました。

パイソンでは:

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

C++ の場合:

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

ここで何か見逃しているので、メモリリークが発生しますか?

4

1 に答える 1

1

いいえ、問題ありません。c メソッドに渡されるオブジェクトは借用されるだけです。つまり、返す前にオブジェクトの refcount を減らす必要はありません (実際のところ、これは悪い、悪いバグです)。

たとえば、ドキュメントのこの部分を参照してください。

呼び出し元に提供されるすべての Python オブジェクト参照は借用参照であることに注意してください。それらの参照カウントを減らさないでください!

メモリ リークが発生していると判断するにはどうすればよいでしょうか。それがあなたの問題である可能性が高いです。

于 2012-12-05T18:17:19.543 に答える