Pointer ist in der Funktion beschrieben, außerhalb wieder NULL

Gast #7239429
Lesenswert?

Hallo,
ich versuche mich gerade in der Listenerstellung in C.
Da habe ich momentan große Probleme einen Pointer aus einer Funktion 
zurückzugeben.
1
typedef struct listNode node;
2

3
int main(void)
4
{
5
    static node* list = NULL;
6
    initList(list, 2);
7
    printList(list);
8
}
9

10
static void initList(node* list, uint8_t data_u8)
11
{
12
    node* newList = malloc(sizeof(node));
13
    if(NULL != newList)
14
    {
15
        newList->data_u8 = data_u8;
16
        newList->next = NULL;
17
        list = newList;
18
        printf("address: %p\tvalue: %i\r\n", newList, newList->data_u8);
19
        printf("address: %p\tvalue: %i\r\n", list, list->data_u8);
20
    }
21
}
22

23
static void printList(node* list)
24
{
25
    if(NULL != list)
26
    {
27
        do{
28
            printf("address: %p\tvalue: %i\r\n", list, list->data_u8);
29
        }while(list->next != NULL);
30
        printf("\r\n\r\n");
31
    }
32
    printf("list is NULL\r\n");
33
}

in der funktion initList bekomme gibt mir das zweite printf die selben 
werte wie vom ersten printf aus.
Damit sollte der pointer list auf newList liegen.
Wenn ich dann aber printList aufrufe, bekomme ich das printf"list is 
NULL" heraus.
Wieso ist die variable auf einmal verschwunden (bzw. war gar nicht von 
initList geschrieben worden?
#7239490
Lesenswert?

Jonas schrieb:
> Wilhelm M. schrieb:
>> Entweder Du änderst das bei initList() zu einem Output-Parameter
>
> Wie mache ich das denn genau? Bzw. was meinst du denn genau? Ich dachte
> durch den Pointer wäre das schon ein input/output parmaeter

Nein, der Pointer selbst wir per-value übergeben.

Du brauchst das:
1
void initList(node** list, uint8_t data_u8);
oder
1
node* initList(uint8_t data_u8);

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren