프로그래밍

 3198, 1/160 회원가입  로그인  
   탈라리스
   자료구조 LinkedList 질문

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=2827 [복사]


LinkedList를 공부하고 있는데
질문이 있습니다.


ind addLLElement(LinkedList *pList, int position, ListNode element)
{
        int ret = FALSE;
        int i = 0;
        ListNode* pPreNode = NULL;
        ListNode* pNewNode = NULL;

        if(pList != NULL){
                if(position >=0 && position < pList->currentElementCount){
                        pNewNode = (ListNode*)malloc(sizeof(ListNode));
                        if(pNewNode != NULL){
                                *pNewNode = element;
                                pNewNode->pLink = NULL;

                                pPreNode = &(pList->headerNode);
                                for(i=0; i<pList->currentElementCount; ++i){
                                        pPreNode = pPreNode->pLink;
                                }

                                pNewNode->pLink = pPreNode->pLink;
                                pPreNode->pLink = pNewNode;

                                pList->currentElementCount++;

                                ret = TRUE;
                        }
                        else
                        {
                                printf("오류, 메모리할당 addLLElement()\n");
                                return ret;
                        }
                }
                else
                {
                        printf("오류, 위치 인덱스-[%d], addElement()\n");
                }
        }
        
        return ret;
}

int main()
{
     ...
     LinkedList *pList = NULL
     LinkedListNode node;

     node.data = 5;

     pList = createLinkedList();
     addLLElement(pList, 0, node);
     ...
}


node의 값을 복사해서 addLLElement()함수로 보내준 후에
addLLElement()함수에서 pNewNode로 대입 하잖아요.

pNewNode는 함수가 종료되면 사라지는 것 아닌가요?

요약 : node를 포인터로 안하고 call by value로 처리하면 addLLElement()함수가 종료되버리면 main함수에 아무런 영향을 주지 못하는것 아닌가요?

  Hit : 4123     Date : 2010/12/30 01:37



    
ruka270 소스를 대강봐서 그런지는 모르겠는데 소스상에서 오류를 찾지 못한 관계로
개념에 대한 질문이라고 생각하겠습니다.
링크드 리스트 등 대부분의 커스텀 자료형은 포인터를 기초로 조작됩니다.
콜바이밸류로 할경우는 아무런 영향을 미치지 못하는게 맞습니다.
2010/12/30  
dawon15 pNewNode = (ListNode*)malloc(sizeof(ListNode));

보시면 아시겠지만 동적할당이죠
이 상태서 이미 Element 하나가 생성된겁니다.
함수에서 탈출하던 뭘 하던 free 하기 전까진 메모리 상에 존재하게 되는거죠

링크드 리스트의 원소는 배열과 다르게 메모리상 어디도 존재합니다.
그것을 포인터를 이용해 연결시킨거죠
2010/12/30  
탈라리스 아하!!
위에 두분 감사합니다.
call by value로는 main에 영향을 미치지 못하는 것이 맞고
동적할당은 메모리에 계속 남는군요!!

감사합니다 ~ ㅋ
2010/12/30