모두의 코드 커뮤니티

C언어로 연결 리스트를 만들다가

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef char* DataType;

typedef struct _NODE
{
    DataType      data;
    struct _NODE* link;
} Node, * ENode;

void InitList(ENode head)
{
    head = (ENode) malloc(sizeof(Node));
    head->link = NULL;
}

void InsertNode(ENode target, ENode src)
{
    if (target == NULL) return;
    if (src == NULL) return;

    ENode new = (ENode) malloc(sizeof(Node));

    new->data    = src->data;
    new->link    = target->link;
    target->link = new;
}

void RemoveNode(ENode target)
{
    if (target == NULL) return;

    ENode now = target->link;

    target->link = now->link;

    free(now);
}

void DestList(ENode head)
{
    if (head == NULL) return;

    ENode now = head->link;
    while (now != NULL)
    {
        ENode next = now->link;

        free(now);

        now = next;
    }

    free(head);
}

void ShowList(ENode head)
{
    ENode now = head->link;

    while (now != NULL)
    {
        printf("%d ", now->data);
        now = now->link;
    }
    puts("");
}

int main(int argc, const char* argv[])
{
    ENode listFruits, temp;

    InitList(listFruits);

    temp->data = "Apple";
    listFruits = InsertNode(listFruits, temp);

    ShowList(listFruits);

    DestList(listFruits);

    return 0;
}

연결 리스트를 만들려고 했는데, 계속해서 실행되지 않고 어디가 문제인지 이해되지 않아 질문 드립니다.

여러 번 시도 끝에 InsertNode 함수 부분에서 오류가 있다는 것을 알지만 그게 왜 오류인지 이해가 되지 않습니다.

왜 그런지 알 수 있을까요?

좋아요 1
void InsertNode(ENode target, ENode src)

InsertNode 함수는 리턴 타입이 void 입니다. 다시 말해 리턴값을 참조하면 안됩니다.

    listFruits = InsertNode(listFruits, temp);

따라서 위 작업을 하게 되면 (아마 컴파일 오류가 뜨지 않았나요?) listFruits 에는 의미 없는 값이 들어갑니다.