我想在netfilter编程中分配内存,但是出现了一些问题。
这些是我想要制作新动态内存的结构。 (来源:http://git.netfilter.org/libnetfilter_queue/tree/src/libnetfilter_queue.c)
struct nfq_q_handle
{
struct nfq_q_handle *next;
struct nfq_handle *h;
uint16_t id;
nfq_callback *cb;
void *data;
};
struct nfq_data {
struct nfattr **data;
};
这是我现在正在制作的功能。
NODE* create_node(struct nfq_q_handle* qh_data, struct nfgenmsg* nfmsg_data, struct nfq_data* nfa_data, void* data_data)
{
NODE* node = (NODE*)malloc(sizeof(NODE));
struct nfq_q_handle* temp_qh = (struct nfq_q_handle*)malloc(sizeof(struct nfq_q_handle));
struct nfgenmsg* temp_nfmsg = (struct nfgenmsg*)malloc(sizeof(struct nfgenmsg));
struct nfq_data* temp_nfa = (struct nfq_data*)malloc(sizeof(struct nfq_data));
void* temp_data = (void*)malloc(malloc_usable_size(data_data));
memcpy(temp_qh, qh_data, sizeof(struct nfq_q_handle));
node->node_qh = temp_qh;
memcpy(temp_nfmsg, nfmsg_data, sizeof(struct nfgenmsg));
node->node_nfmsg = temp_nfmsg;
memcpy(temp_nfa, nfa_data, sizeof(struct nfq_data);
node->node_nfa = temp_nfa;
memcpy(temp_data, data_data, malloc_usable_size(data_data));
node->node_data = temp_data;
return node;
}
当我在函数中使用malloc并编译它时,会出现错误消息。 “错误:'sizeof'无效应用于不完整类型'struct ..' 实际上struct nfgenmsg工作正常,但struct nfq_q_handle和struct nfa_data不起作用并显示错误消息。
有什么解决方案吗?请帮帮我。
而且,我使用'malloc_usable_size',但我不知道如何正确使用它。如果您对'malloc_usable_size'有所了解,请与我联系。感谢。
加: 我通知struct只在头文件中声明“struct nfq_q_handle”。 但在c文件中,它有自己的参数。 比如,struct nfq_q_handle {....}