typedef struct {
struct {
double i1, i2;
} EXP;
struct {
double i1, i2;
} SIN;
struct {
double i1, i2;
} PULSE;
struct {
double *i1, *i2;
} PWL;
} TRANS;
struct term {
TRANS trans;
struct term *nxt;
};
int main() {
struct term *look;
}
我有上面的结构,指针指向结构术语。有人能告诉我如何在struct PWL中取消引用指针i1吗?
我试过这个:
*(look->trans.PWL.i1)
但它会产生分段错误。
提前致谢!
答案 0 :(得分:2)
分段错误是因为您分配了一个指针,但没有为指向指针的指针创建内存。一旦你这样做,那么*(look->trans.PWL.i1)
确实是如何访问内部结构中的那个字段。
您需要为结构以及。
中的所有引用分配内存struct term *look = malloc(sizeof(struct term));
look->trans.PWL.i1 = malloc(sizeof(double));
look->trans.PWL.i2 = malloc(sizeof(double));
当你完成时,你需要通过调用free
来反转这个过程。
free(look->trans.PWL.i2);
free(look->trans.PWL.i1);
free(look);
或许,i1
和i2
可能指向其他地方分配的值,然后它会如下所示:
struct term *look = malloc(sizeof(struct term));
look->trans.PWL.i1 = &look->trans.EXP.i1;
look->trans.PWL.i2 = &look->trans.EXP.i2;
要解除分配你的免费look
。请务必将每次成功通话与malloc
调用free
。
答案 1 :(得分:0)
特定于PWL.i1
int main() {
struct term *look; // set up your variable
look = malloc(sizeof(struct term)); // give it some memory
look->trans.PWL.i1 = malloc(sizeof(double)); //give some memory to your double pointer
*(look->trans.PWL.i1) = 5.0; // assign it a value
printf("%lf\n", *(look->trans.PWL.i1));
return 0;
}
因为look
是指向term
结构的指针,这意味着当你访问它的元素时,你需要尊重它,然后一旦你拥有它就访问成员(->
)只需通过.
运营商访问其他成员:
look->trans.PWL.i1
在这种情况下,PWL的i1
成员是一个指针,所以你必须遵循整个事情来分配一个值。 (在这之前,你需要再分配一些内存)
当你完成任务时,释放一切。