因为“应用程序错误不完整”而无法malloc nfq_q_handle

时间:2017-03-06 10:19:29

标签: c linux netfilter

我想在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 {....}

0 个答案:

没有答案