关于结构体的递归定义问题,请教各位大神
是不是C++不允许结构体自身的递归定义?编程时需要引用到一个头文件,这个头文件就有个这样的结构体
struct pcap_if {
struct pcap_if *next;
char *name;/* name to hand to "pcap_open_live()" */
char *description;/* textual description of interface, or NULL */
struct pcap_addr *addresses;
bpf_u_int32 flags;/* PCAP_IF_ interface flags */
};
程序调试过程中可以查到addresses = CXX0030: 错误: 无法计算表达式的值,next = CXX0030: 错误: 无法计算表达式的值,是不是这个引起的?有没有什么解决办法?
[解决办法]
可以这样定义的、、、
[解决办法]
pcap_if *alldevs;
你声明了结构体指针,但是没有给他开辟空间就用,这样next里面肯定指向非法空间。
[解决办法]
第一,结构体不允许递归定义,因为结构体是有大小的,你不能定义“一个结构体的大小等于一个整型变量的大小加上它本身的大小”
第二,这不是递归定义,这个结构体内包含一个指针,这个指针指向另一个结构体,所以可以计算它的大小,因为不管指向什么类型,指针的大小都是固定值
[解决办法]
在执行到for时,alldevs 及 alldevs->next 都指向着内存中神秘未知的地方,编译器都不知道,只有运行期才能确定,运气不好,就直接崩了
- C/C++ code
pcap_if *alldevs;for(d=alldevs; d; d=d->next)