我在结构中使用了一个灵活的数组。所以我想用我自己的一些代码来改变分配给这个结构的内存。基本上我想改变new_structname()和structname_variable_set()函数。如何更改由SWIG生成的用于C结构内存分配的默认代码?
typedef struct vector{
int x;
char y;
int arr[0];
} vector;
这里,SWIG产生new_vector()
函数通过调用calloc(1,sizeof(struct 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将由用户提供。 –
我不想改变函数的名字,我想改变函数里面的代码。 –