我想为不同的标头结构指针保留内存以填充它,如下所示:
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);
^
答案 0 :(得分:0)
您不能将函数调用作为全局变量的初始化表达式的一部分。
这是错误消息告诉您的内容。
结构的大小与它无关(并且结构的大小不能为0)。
答案 1 :(得分:0)
您正尝试使用非常量表达式初始化全局变量。例如,你不能这样做:
#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;
}