2017-01-28 24 views
-1

Возможно ли создать и вставить новый элемент в список указателей в области действия другой функции? Этот код работает только, если я позвоню printf в insertEntry функции, где я создал локальную переменную n2_4 в противном случае выходУказатели в C. Локальная переменная в функции void и области

-1247318248 вина Сегментация

Я подумал, что если я использую указатели Я мог бы создать и вставить новый элемент в списке указателей везде, где я хочу. Но это что-то вроде локального ограничения ограниченной видимости. Или я ошибаюсь?

Или мне нужно использовать функцию, которая может вернуть один указатель, установленный в void insertEntry fuction для таких целей?

// 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

Нет, вы не можете использовать локальные переменные функции (нестатические) вне функции. Они выходят за рамки. – kaylum

+0

Спасибо @kaylum! – Yellowfun

ответ

2

Что вы ищете является динамическое распределение памяти, посмотрите на malloc.

В основном локальные переменные «исчезают», когда вы возвращаетесь из функции. Память динамически распределяет жизни до тех пор, пока вы явно не назовете free.

Надеюсь, это помогло, удачи :)

+0

Спасибо! Я только что прочитал о указателях и еще не достиг динамического распределения памяти. – Yellowfun