Ref/DeRef 双指向 link 列表
Ref/DeRef a double pointed link list
我正在传递一个链表,其中包含另一个链表到一个函数,但是我遇到了问题 de/referencing 来自传递的双指针的内部链表。 push(*config->inner_linked_list...
行的编译器错误是 '*config' is a pointer; did you mean to use '->'
。在 main &config->inner_linked_list
内部工作正常。我似乎无法弄清楚我需要在这里使用哪种 ref/deref。
typedef struct new_inner {
wchar_t setting[10];
wchar_t val[10];
struct new_inner * next;
}INTLL_t ;
typedef struct new_head {
wchar_t name[10];
struct INTLL_t * inner_linked_list;
struct new_head * next;
} HEAD_t;
// In Main
int main(){
...
HEAD_t * config;
config = malloc(sizeof(HEAD_t));
config = NULL;
//config populated elsewhere
functo1(&config);
...
}
BOOL functo1(HEAD_t ** config){
HEAD_t * current = *config;
while(current != NULL){
INTLL_t * s = another_ll; // Also INTLL_t
while(s != NULL){
push(*config->inner_linked_list, another_ll->setting,another_ll->val);
s = s->next;
}
current = current->next;
}
return TRUE;
}
struct INTLL_t * inner_linked_list;
struct INTLL_t
是一个未定义的类型。它与 INTLL_t
(它是一个 typedef,而不是一个结构)无关。您在这里的意思可能是 INTLL_t *
或 struct new_inner *
。
HEAD_t * config;
config = malloc(sizeof(NODE_t));
config = NULL;
这是内存泄漏。您刚刚丢失了指向 malloc
返回的块的唯一指针。此外,NODE_t
未定义。无论如何,它应该是 config = malloc(sizeof (HEAD_t))
或(最好)config = malloc(sizeof *config)
.
BOOL functo1(HEAD_t ** config){
BOOL
未定义。
NODE_t * s = another_ll;
NODE_t
和 another_ll
均未定义。
push(*config->inner_linked_list, another_ll->setting,another_ll->val);
push
未定义。
config
是指向结构指针的指针。 *a->b
解析为 *(a->b)
,这要求 a
是一个指向结构的指针,该结构的 b
成员也是一个指针(它等同于 *((*a).b)
)。您需要 (*config)->inner_linked_list
(或等同于 (**config).inner_linked_list
)。
return TRUE;
TRUE
未定义。
通过指针运算符访问成员 -> 比取消引用运算符 * 具有更高的优先级,因此当您执行 *config->inner_linked_list 时,它会尝试访问 HEAD_t 的双指针成员,这将导致在错误中。它在 main 中工作,因为那里的配置对象是一个普通指针。您需要括号才能正确使用。
(*config)->inner_linked_list
我正在传递一个链表,其中包含另一个链表到一个函数,但是我遇到了问题 de/referencing 来自传递的双指针的内部链表。 push(*config->inner_linked_list...
行的编译器错误是 '*config' is a pointer; did you mean to use '->'
。在 main &config->inner_linked_list
内部工作正常。我似乎无法弄清楚我需要在这里使用哪种 ref/deref。
typedef struct new_inner {
wchar_t setting[10];
wchar_t val[10];
struct new_inner * next;
}INTLL_t ;
typedef struct new_head {
wchar_t name[10];
struct INTLL_t * inner_linked_list;
struct new_head * next;
} HEAD_t;
// In Main
int main(){
...
HEAD_t * config;
config = malloc(sizeof(HEAD_t));
config = NULL;
//config populated elsewhere
functo1(&config);
...
}
BOOL functo1(HEAD_t ** config){
HEAD_t * current = *config;
while(current != NULL){
INTLL_t * s = another_ll; // Also INTLL_t
while(s != NULL){
push(*config->inner_linked_list, another_ll->setting,another_ll->val);
s = s->next;
}
current = current->next;
}
return TRUE;
}
struct INTLL_t * inner_linked_list;
struct INTLL_t
是一个未定义的类型。它与 INTLL_t
(它是一个 typedef,而不是一个结构)无关。您在这里的意思可能是 INTLL_t *
或 struct new_inner *
。
HEAD_t * config;
config = malloc(sizeof(NODE_t));
config = NULL;
这是内存泄漏。您刚刚丢失了指向 malloc
返回的块的唯一指针。此外,NODE_t
未定义。无论如何,它应该是 config = malloc(sizeof (HEAD_t))
或(最好)config = malloc(sizeof *config)
.
BOOL functo1(HEAD_t ** config){
BOOL
未定义。
NODE_t * s = another_ll;
NODE_t
和 another_ll
均未定义。
push(*config->inner_linked_list, another_ll->setting,another_ll->val);
push
未定义。
config
是指向结构指针的指针。 *a->b
解析为 *(a->b)
,这要求 a
是一个指向结构的指针,该结构的 b
成员也是一个指针(它等同于 *((*a).b)
)。您需要 (*config)->inner_linked_list
(或等同于 (**config).inner_linked_list
)。
return TRUE;
TRUE
未定义。
通过指针运算符访问成员 -> 比取消引用运算符 * 具有更高的优先级,因此当您执行 *config->inner_linked_list 时,它会尝试访问 HEAD_t 的双指针成员,这将导致在错误中。它在 main 中工作,因为那里的配置对象是一个普通指针。您需要括号才能正确使用。
(*config)->inner_linked_list