gpt4 book ai didi

c - 收到以下警告 : The ABI of passing struct with a flexible array member has changed in GCC 4. 4

转载 作者:太空宇宙 更新时间:2023-11-04 01:12:35 25 4
gpt4 key购买 nike

当我尝试运行我的程序时,我收到此警告和一些奇怪的错误。以下结构中的 rmi_pdu 包含我要访问的可变大小的数组。

struct rmi_message_s {  /* Queue element containing Rmi message */
struct rmi_message_s *hnext;
struct rmi_message_s *hprev;
uint16_t gen_counter; /* Generation counter */
time_value send_time;
uint8_t retry_count;
TAILQ_ENTRY(rmi_message_s) rmi_message_next;
rmi_message_pdu rmi_pdu; /* contains a variable sized array */
};

typedef struct {
uint16_t zero;
uint16_t type;
uint8_t version;
uint8_t len;
uint8_t protocol;
uint16_t edge_port;
uint16_t core_port;
uint32_t connexus_id;
pi_ipv4_addr_t edge_addr;
pi_ipv4_addr_t core_addr;
uint16_t gen_count; /* Integer to identify a stale packet */
uint8_t payload[];
} rmi_message_pdu;

问题是当我试图释放我动态分配的内存时。内容在那里,但 free() API 是 abort()ing 。这是核心的样子

in raise () from /lib64/libc.so.6
in abort () from /lib64/libc.so.6
in __libc_message () from /lib64/libc.so.6
in _int_free () from /lib64/libc.so.6
in free () from /lib64/libc.so.6
in free (p=0x2aaabc000fa0) at mallocdbg.cc:188
in rmi_hash_cleanup (rmi_msg=0x2aaabc000fa0) at tcpsvc_rmi.c:126
in rmi_process_response (response_packet=0x27422e00) at tcpsvc_rmi.c:239
in rmi_message_handle (pkt=0x27422e00 "", cnt=28) at tcpsvc_base.c:154
in udpif_worker (arg=0x2b01f7014340) at rumpnet_virtif/if_udp_netbsd_guest.c:573
in threadbouncer (arg=0x2b01f7016428) at rumpkern/emul.c:428
in clone () from /lib64/libc.so.6

这是分配的样子。想要使用 rmi 的调用者会将大小作为参数传递。

struct rmi_message_s *rmi_msg;
rmi_msg = (struct rmi_message_s *) malloc (sizeof(struct rmi_message_s *) + len * sizeof(uint8_t));

len 作为参数传递。

最佳答案

您没有分配足够的内存:

struct rmi_message_s *rmi_msg ;
rmi_msg = (struct rmi_message_s *) malloc
(sizeof(struct rmi_message_s) + len * sizeof(uint8_t));

你有 ...sizeof(struct rmi_message_s *)...,但它应该是 ...sizeof(struct rmi_message_s)...

关于c - 收到以下警告 : The ABI of passing struct with a flexible array member has changed in GCC 4. 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8883439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com