我想为不同的头结构指针预留内存,以便填充它,如下所示:
struct icmp *_icmp_hdr = (struct icmp *) Smalloc(hs_icmp, 0);
struct icmp6_hdr *_icmp6 = (struct icmp6_hdr *) Smalloc(hs_icmp6, 0);
struct ip *_ip_hdr = (struct ip *) Smalloc(hs_ip, 0);
struct ip6_hdr *_ip6_hdr = (struct ip6_hdr *) Smalloc(hs_ip6, 0);
union data_err *_payload = (union data_err *) Smalloc(s_payload, 0);
当标题的大小为:struct icmp, icmp6_hdr, ip...
时,就会出现这个问题。
hs_icmp, hs_icmp6, hs_ip, ...
)使用sizeof()
运算符(例如.#define hs_icmp sizeof(struct icmp)
)。当我编译时,每个标头结构指针都会出现错误,我不知道如何解决它,例如:
error: initializer element is not constant
struct icmp *_icmp_hdr = (struct icmp *) Smalloc(hs_icmp, 0);
^
发布于 2015-04-09 05:04:30
不能将函数调用作为全局变量的初始化器表达式的一部分。
这就是错误信息告诉你的。
结构的大小与它无关(结构不可能有0大小,真的)。
发布于 2015-04-09 05:09:04
您正在尝试用非常量表达式初始化全局变量。例如,您不能这样做:
#include <stdio.h>
int a = 0;
int b = a; //error: initializer element is not constant
int main(void) {
// your code goes here
return 0;
}
但你可以这样做:
#include <stdio.h>
int a = 0;
int main(void) {
int b = a; //OK
return 0;
}
或者这个:
#include <stdio.h>
#define A 0
int b = A; //OK
int main(void) {
return 0;
}
https://stackoverflow.com/questions/29539140
复制