私は構造体にフレキシブルな配列を使用しています。だから私は自分のコードのいくつかでその構造体に割り当てられたメモリを変更したい。基本的には、new_structname()とstructname_variable_set()関数を変更したいと思います。ここ C構造のメモリの割り当てのためにSWIGによって生成されるデフォルトのコードを変更するにはどうすればいいですか?
typedef struct vector{
int x;
char y;
int arr[0];
} vector;
は、SWIGはSWIGは特殊な方法で構造のこれらのタイプを処理しません
calloc(1,sizeof(struct vector))
を呼び出してメモリを割り当てる
new_vector()
機能を生成しました。したがって、フレキシブルアレイのメモリを割り当てるために、生成されたswigをnew_vector()に変更する必要があります。それで、これを処理する方法はありますか?
どのように変更する必要があるかについて具体的に説明できますか?同等のセマンティクスを持つ代替の名前付き関数に切り替えることはかなり簡単ですが、より複雑なものを実行したい場合は、より深い変更を加える必要があります。 – Flexo
new_structname()関数では、メモリは以下のように割り当てられます。 var = calloc(1、sizeof(struct name))。これは、フレキシブルアレイから出る構造体のサイズを考慮に入れます。ですから、私がしたいのはvar = calloc(1、sizeof(struct name)+ size_of_flexi_arr)です。ここで、size_of_flexi_arrはユーザーによって指定されます。 –
私は関数の名前を変更したくない、私は関数内のコードを変更したい。 –