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;
}
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
Merci @kaylum! – Yellowfun