Я передаю связанный список, содержащий другой связанный список, в функцию, но у меня возникают проблемы со ссылкой на внутренний связанный список из переданного двойного указателя. Ошибка компилятора здесь для строки 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;
}
Я сделал, отредактировал. Благодарность





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 не определяется.
Спасибо за ответ и за уделенное время.
Пытался отработать здесь логику утечки памяти. Это связано с выполнением sizeof (NODE_t) и тем, что NODE_t не определен. (* NODE_t был опечаткой. Должен был быть HEAD_t) или Установка "config = NULL" после вызова malloc не делает то, что я думаю?
Доступ к члену через оператор указателя -> имеет более высокий приоритет, чем оператор разыменования *, поэтому, когда вы выполняете * config-> inner_linked_list, он пытается получить доступ к члену двойного указателя HEAD_t, что приведет к ошибке. Он работает в основном, потому что там объект конфигурации является обычным указателем. Для правильного использования вам понадобятся круглые скобки.
(*config)->inner_linked_list
config = malloc(sizeof(NODE_t));вы имели ввидуsizeof(HEAD_t)?NODE_tне определен в вашем коде?