我有6级嵌套结构。我有最后三个级别的问题。程序编译得很好,但是当我运行它时会出现Segmentation故障。分配中存在一些问题是我的感受。请指出错误。
typedef struct {
char addr[6];
int32_t rs;
uint16_t ch;
uint8_t ap;
} C;
typedef struct {
C *ap_info;
} B;
typedef struct {
union {
B wi;
} u;
} A;
function1(char addr , int32_t rs, uint16_t ch, uint8_t ap) {
A la;
la.u.wi.ap_info->addr[6] = addr;
la.u.wi.ap_info->rs = rs;
la.u.wi.ap_info->ch = ch;
la.u.wi.ap_info->ap = ap;
}
答案 0 :(得分:1)
您没有为la.u.wi.ap_info
指向的结构分配内存,或者设置la.u.wi.ap_info
指针本身。你需要这样的东西:
la.u.wi.ap_info = calloc(1,sizeof(C)); // allocate a C instance and
// point la.u.wi.ap_info at it
...当您不再需要结构时,使用更晚的free(la.u.wi.ap_info);
。或者你可以将它指向一个预先存在的结构,只要你确保你指向它的结构将存在,直到你完成它为止。
此外,该行:
la.u.wi.ap_info->addr[6] = addr;
不正确;它将addr
中的字符分配给数组的第七个元素,该元素只有六个元素的空间(因此它超出了界限)。如果addr
是您要复制到结构中的字符串,那么其类型应为char *
而不是char
,并且您需要以下内容:
strncpy(la.u.wi.ap_info->addr, addr, 5); // copy up to 5 chars
la.u.wi.ap_info->addr[5] = '\0'; // explicitly null the sixth char
而不是简单的任务。
答案 1 :(得分:0)
您没有为指针分配内存