Ref/DeRef список двухточечных ссылок
Я передаю связанный список, содержащий другой связанный список для функции, но у меня возникают проблемы с / ссылаются на внутренний связанный список из переданного двойного указателя. Ошибка компилятора здесь для строки push(*config->inner_linked_list...
является '*config' is a pointer; did you mean to use '->'
, Внутри основной &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;
}
2 ответа
Доступ к элементу через оператор указателя -> имеет более высокий приоритет, чем оператор разыменования *, поэтому, когда вы делаете *config->inner_linked_list, он пытается получить доступ к элементу двойного указателя HEAD_t, что приведет к ошибке. Это работает в основном, потому что там объект конфигурации является обычным указателем. Вам нужны скобки для правильного использования.
(* Конфигурация) -> inner_linked_list
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
не определено.