4

私は SWIG を使用しており、私の関数char *は malloc された を返します。SWIG を返しますPyString_FromStringAndSize(my-char-str, len)

my-char-strCラッパーコードを編集せずにこれを解放する方法はありますか?

4

1 に答える 1

9

%newobjectファイルでディレクティブを使用し.iます。SWIG 2.0ドキュメントから:

このようにメモリを割り当てる関数があれば、

char *foo() {
   char *result = (char *) malloc(...);
   ...
   return result;
}

その場合、SWIG によって生成されたラッパーでメモリ リークが発生します。返されたデータは文字列オブジェクトにコピーされ、古い内容は無視されます。

メモリ リークを修正するには、%newobject ディレクティブを使用します。

%newobject foo;
...
char *foo();
于 2012-08-24T22:21:02.650 に答える