2017-01-28 11 views
-1

다른 함수의 범위에있는 포인터 목록에 새 요소를 만들고 삽입 할 수 있습니까? 내가 지역 변수 n2_4을 만들었습니다 insertEntry 함수 내에서 printf를 호출하는 경우이 코드는, 그렇지 않으면 출력이void 함수 및 범위의 로컬 변수

-1247318248 분할 오류

내가 만들 수 포인터를 사용하는 경우 생각

및 삽입입니다 작업 내가 원하는 포인터의 목록에있는 새로운 요소. 하지만 지역 변수가 제한된 가시 범위와 같은 것입니다. 아니면 내가 잘못 본거야?

또는 이러한 목적으로 void insertEntry fuction insted 한 포인터를 반환 할 수있는 함수를 사용해야합니까? 당신이 찾고있는 무엇

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