Skip to content

12주차 'linked list 구현' 문제 관련 질문글 #31

@JJong2003

Description

@JJong2003

안녕하세요? malloc() - free() 에 대해 한 가지 질문이 있어 글을 작성합니다.
아직 실습 과제가 진행 중인 관계로 전체 코드를 제공해도 괜찮을지 몰라서 일부 문제가 있는 코드만 제공하는 점 양해바랍니다.

struct node {
    int value;
    struct node *next;
};

void free_nodes(struct node *ptr) {
    if (ptr==NULL) return;
    free_nodes(ptr->next);
    free(ptr);
}

int main(){
int v;
...
...
struct node head = {-1, NULL};  // dummy
( loop when v!=0 )
        // create new node
        struct node *new_node = malloc(sizeof(struct node));
...
...

    // print answer
    print_linked_list(head.next);

    //malloc free
    free_nodes(head.next);
    head.next = NULL;
    return 0;
}

문제 상황
현재 free_nodes() 함수에서 자꾸만 segmentation fault가 발생하고 있습니다.
그 이유는 이미 해제된 메모리가 free()에 다시 사용되면서 생기는 것이라고 판단했고, 실제로 hackerrank에 free_nodes() 함수에 주석 처리만 하면 바로 통과가 되고 있습니다.

질문
아무래도 해커랭크에서는 매우 많은 양의 input 을 넣음으로써 malloc이 이미 할당 된 메모리를 가져다 사용하거나 하는 등의 이슈가 있는 것 같습니다.

  1. 대량의 동적 메모리를 생성하면 이미 제공한 메모리malloc()된 블록이 겹쳐질 수도 있는 것인가요?
  2. 재귀적인 방법으로 free()를 사용하는 것에 문제가 있는 것인지도 궁금합니다.
  3. 이외의 다른 이유가 있을까요?

대량의 input 제공이 제 local에서는 테스트 하기 어려운 관계로 제 생각이 맞는 것인지, 다른 이유가 있는 것인지 도움을 구해보고자 글을 남깁니다.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions