我在結構中使用了一個靈活的數組。所以我想用我自己的一些代碼來改變分配給這個結構的內存。基本上我想改變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將由用戶提供。 –
我不想改變函數的名字,我想改變函數裏面的代碼。 –