はじめてのSWIG5 (引数の受け渡しとか)
下のようなパターンではまる
実装
public: unsigned int makeDictionary(char** list) { this->list = list; } void search(const char* text) { this->listを参照してあれこれ }
使用(Perlから)
hige->makeDictionary($wordlist); hige->search("I LOVE U");
Perlから渡った、$wordlist のコピー?がの寿命が、makeDictionaryの中だけっぽいのだ。
つまり hige->search を呼んだときには、$wordlistのコピー?は回収されてしまう様子。
この動作は確かに正しい気がするな。
たぶん .i のなかで指定している typemap がその処理をやっているんだろう。
見つけた。
// This cleans up the char ** array after the function call %typemap(freearg) char ** { free($1); }
SWIGGERな皆さんは、どんなtypemapを使っていますでしょうか?