-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
안녕하세요? 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이 이미 할당 된 메모리를 가져다 사용하거나 하는 등의 이슈가 있는 것 같습니다.
- 대량의 동적 메모리를 생성하면 이미 제공한 메모리malloc()된 블록이 겹쳐질 수도 있는 것인가요?
- 재귀적인 방법으로 free()를 사용하는 것에 문제가 있는 것인지도 궁금합니다.
- 이외의 다른 이유가 있을까요?
대량의 input 제공이 제 local에서는 테스트 하기 어려운 관계로 제 생각이 맞는 것인지, 다른 이유가 있는 것인지 도움을 구해보고자 글을 남깁니다.