指向嵌套结构中结构的指针

时间:2012-08-30 02:23:50

标签: c pointers structure

我有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;
}

2 个答案:

答案 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)

您没有为指针分配内存