0

我有 6 层嵌套结构。我在最后三个级别有问题。该程序编译得很好,但是当我运行它时,它会因分段错误而崩溃。作业有问题是我的感觉。请指出错误。

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;
}
4

2 回答 2

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 *not 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

而不是简单的赋值。

于 2012-08-30T03:34:53.143 回答
0

您没有为指针分配内存

于 2012-08-30T02:25:46.553 回答