如果我有以下结构:
struct myStruct {
int value;
struct myStruct *next;
};
并将实例视为
struct myStruct *the_struct = (void *) malloc(sizeof(struct myStruct))
如何访问"值" *下一个?
我试过做
the_struct->next.value
和
*(the_struct->next)->value
但我收到错误"取消引用指向不完整类型的指针。"
答案 0 :(得分:1)
你应该使用
the_struct->next->value
但在此之前,您应该确保the_struct->next
有效。
BTW,malloc(3)确实失败了,并且在成功时它会提供未初始化的内存区域。所以请阅读perror(3)和exit(3),然后代码:
struct myStruct *the_struct = malloc(sizeof(struct myStruct));
if (!the_struct)
{ perror("malloc myStruct"); exit(EXIT_FAILURE); };
the_struct->value = -1;
the_struct->next = NULL;
(或者,使用memset(3)将malloc
的成功结果的每个字节归零,或使用calloc
代替malloc
。< / p>
稍后,您可能同样获取并初始化struct myStruct* next_struct
并最终分配the_struct->next = next_struct;
,之后您可以分配the_struct->next->value = 32;
(或者,在特定情况下,等同于next_struct->value = 32;
)
请编译所有警告和调试信息(gcc -Wall -g
)并学习如何使用调试器(gdb
)。在Linux上,还可以使用valgrind。