메모리 누수(Memory Leak) 컴퓨터 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상 더 이상 사용하지 않는 객체들이 힙(Heap) 영역에 남아있어 불필요하게 메모리를 차지하는 상황 메모리 라이프 사이클 메모리 할당 : 변수를 선언할 때나 객체, 배열 등을 생성할 때 메모리를 할당 메모리 사용 : 할당된 메모리를 읽거나 쓰는 단계(변수에 새로운 값을 할당하거나 객체의 속성을 읽을 떄 메모리 사용) 메모리 해제 : 객체가 더 이상 필요하지 않게 되면 메모리 해제코드 예시 char *a = malloc(20); // 포인터 변수 a에 동적 메모리 할당 char *b = malloc(10); // 포인터 변수 b에 동적 메모리 할당 b = a; // b가 가지고 있던 주소값을 a에 할당 fre..
728x90
반응형
분류 전체보기
1. 큐를 이용해 순차적으로 탐색(BFS 방식?) 조건을 3가지로 구분해서 구현 자식 노드가 없는 경우 왼쪽 자식 노드만 있는 경우 오른쪽 자식 노드만 있는 경우 void levelOrderTraversal(BSTNode *root) { Queue *q = malloc(sizeof(Queue)); BSTNode *cur; q->head = NULL; q->tail = NULL; enqueue(&(q->head), &(q->tail), root); while (!isEmpty(q->head)) { cur = dequeue(&(q->head), &(q->tail)); printf("%d ", cur->item); if (cur->left == NULL && cur->right != NULL) { enqueu..
1. 두 개의 트리 구조적 일치 확인하기(값, 구조 동일) 트리의 노드를 비교해가면서 다르면 0을 반환 int identical(BTNode *tree1, BTNode *tree2) { int result1, result2; if (tree1->item != tree2->item) { return 0; } if (tree1 == NULL && tree2 == NULL) { return 1; } result1 = identical(tree1->left, tree2->left); result2 = identical(tree1->right, tree2->right); if (result1 == result2) { return 1; } else { return 0; } } 2. 트리의 최대 높이 구하기 노드가 ..
1. 연결 리스트를 이용해 스택 만들기 큐는 선입선출(FiFO : First In, First Out)이고, 스택은 후입선출(LIFO : Last In, First Out)이므로 구현이 약간 다름 void createStackFromLinkedList(LinkedList *ll, Stack *s) { ListNode *cur = ll->head; ListNode *cur_s = s->ll.head; ListNode *new_node; if (cur == NULL) { return; } while (cur != NULL) { // 새로운 노드를 만들고 메모리 할당을 받아 주소를 저장 new_node = malloc(sizeof(ListNode)); // 스택에 노드가 있는 경우 if (s->ll.head ..
1. 연결 리스트를 이용해 큐를 만들기 큐에 첫 번째 노드를 생성하는 경우(큐가 비었을 경우) 큐가 비지 않고 노드가 있는 경우로 나누어서 노드를 추가 void createQueueFromLinkedList(LinkedList *ll, Queue *q) { ListNode *cur = ll->head; ListNode *tail, *new_Node = NULL; if (cur == NULL) { return; } while (cur != NULL) { // 새로운 노드에 메모리를 할당 받아 주소값을 저장 new_Node = malloc(sizeof(ListNode)); if (q->ll.head == NULL) { // 큐가 비었다면 연결 리스트의 cur값의 item을 new_Node의 item에 저장 ..
1. 홀수를 가진 노드를 뒤로 넣어 정렬하기 해결하지 못한 문제 분석하다가 홀수를 처리하는 과정에서 포인터를 이상한 곳에 지정해 세그멘테이션 폴트 발생 꼬리가 현재 노드(홀수)를 next로 가리킴 현재(홀수)의 전 노드가 현재(홀수)의 next를 가리킴 현재(홀수)의 next를 지움(NULL) cur를 이전 노드로 이동 꼬리 노드를 현재(홀수) 이동시킨 노드로 이동 void moveOddItemsToBack(LinkedList *ll) { ListNode *cur, *prev, *tail; cur = ll->head; int size = ll->size; while (cur != NULL) { prev = cur; cur = cur->next; tail = prev; } cur = ll->head; pr..
1. 정렬하면서 노드 삽입하기 ll->head가 없는경우 가장 작은 수가 들어오는 경우 중간 크기의 수가 들어오는 경우 가장 큰 수가 들어오는 경우 int insertSortedLL(LinkedList *ll, int item) { ListNode *pre, *cur, *temp; if (ll->head == NULL) { cur = ll->head; ll->head = malloc(sizeof(ListNode)); ll->head->item = item; ll->head->next = NULL; ll->size++; printf("Head 추가\n"); return 0; } cur = ll->head; pre = NULL; while (cur != NULL) { if (cur->item == item)..
728x90
반응형