2017-01-28 2 views
-1

Est-il possible de créer et d'insérer un nouvel élément dans une liste de pointeurs dans le cadre d'une autre fonction? Ce code ne fonctionne que si je l'appelle printf au sein de la fonction insertEntry où j'ai créé la variable locale n2_4 sinon la sortie estPointeurs en C. Variable locale dans la fonction et la portée void

-1247318248 Segmentation fault

Je pensais que si j'utilise des pointeurs je pourrais créer et d'insérer un nouvel élément dans une liste de pointeurs partout où je le veux. Mais c'est quelque chose comme la portée de visibilité limitée locale variable. Ou je me trompe?

Ou je dois utiliser une fonction qui peut renvoyer un pointeur de void insertEntry fuction à de telles fins?

// Function to insert a new entry into a linked list. 
#include <stdio.h> 

struct entry 
{ 
    int   value; 
    struct entry *next; 
}; 

void insertEntry(struct entry *insertion, struct entry *previous) 
{ 
    struct entry n2_4; 
    n2_4.value = 299; 
    struct entry *N2_4 = &n2_4; 

    insertion->next = previous->next; // set n2_3.next to point to whatever n2.next was pointing to 
    previous->next = insertion;  // set n2.next to point to n2_3 

    insertion->value = 250; 

    N2_4->next = insertion->next; 
    insertion->next = N2_4; 
} 

void printPlist(struct entry *list_pointer) 
{ 
    while (list_pointer != (struct entry *) 0) { 
     printf("%i\n", list_pointer->value); 
     list_pointer = list_pointer->next; 
    } 
    printf("\n"); 
} 

int main(void) 
{ 


    struct entry n1, n2, n3, n2_3; 
    struct entry *list_pointer = &n1; 

    n1.value = 100; 
    n1.next = &n2; 

    n2.value = 200; 
    n2.next = &n3; 

    n3.value = 300; 
    n3.next = (struct entry *) 0; // Mark list end with null pointer 

    printPlist(list_pointer); 

    insertEntry(&n2_3, &n2); 

    printPlist(list_pointer); 

    return 0; 
} 
+2

Non, vous ne pouvez pas utiliser les variables locales de fonction (non statiques) en dehors de la fonction. Ils sortent de la portée. – kaylum

+0

Merci @kaylum! – Yellowfun

Répondre

2

Qu'est-ce que vous cherchez est allocation dynamique de mémoire, jetez un oeil à malloc.

Les variables locales disparaissent lorsque vous revenez de la fonction. Mémoire allouée dynamiquement des vies jusqu'à ce que vous appelez explicitement free.

Espérons que cela a aidé, bonne chance :)

+0

Merci! Je viens de lire sur les pointeurs et je n'ai pas encore atteint l'allocation de mémoire dynamique. – Yellowfun