1. 오늘 학습내용
① 프로젝트 설계
- 프로젝트 구현 전 추상적인 순서도 반드시 작성
- 전체 흐름을 먼저 눈으로 확인
- 재귀 호출 사용해보기
- 교재: ch2 p.61 참고
② 메모리 누수 확인 방법
- 리눅스 명령어 top
- CPU 사용량
- 메모리 사용 현황
- 실행 중인 프로세스 상태 확인 가능
- 프로그램 실행 후 메모리 사용이 계속 증가하면
- 메모리 누수 의심
③ 셸로우 카피 vs 딥 카피
- Shallow Copy (얕은 복사)
- 주소만 복사
- 같은 메모리를 공유
- 의도한 경우면 괜찮음
- 의도하지 않으면 충돌 위험
- Deep Copy (깊은 복사)
- 실제 데이터(원소 하나하나) 복사
- 서로 독립적인 메모리 사용
④ 자료구조 — LinkedList 기본 동작
- 필수 기능
- 추가 add
- 삭제 remove
- 목록 출력 list
- 수정 update
- 메모리 관리
- new ↔ delete (동적 생성 / 해제)
- 노드 연결
- next : 다음 노드
- prev : 이전 노드
⑤ 링크드 리스트 구조
- 노드(Node) : 데이터 사이를 잇는 징검다리
- 필드(Field) : 노드가 가지는 데이터 영역
- 노드 구조체 정의 예시
typedef struct Node {
char data[4];
struct Node* link;
};
→ 구조가 단순하고 가독성 좋은 잘 짠 코드 예시
⑥ Dangling Pointer
- 이미 해제된 메모리를 가리키는 포인터
- 위험한 메모리 덩어리
- 발생 원인
- free() 이후 포인터를 NULL로 초기화하지 않음
- 문제점
- 예측 불가능한 동작
- 프로그램 오류 및 충돌 발생 가능
2. 헷갈렸던 거
- 셸로우 카피와 딥 카피의 실제 차이
- top 명령어로 메모리 누수를 어떻게 판단하는지
- dangling pointer가 왜 위험한지
- 링크드 리스트에서 next / prev 역할
3. 나중에 다시 볼 키워드
- 프로젝트 순서도 그리는 법
- 재귀 호출
- Shallow Copy / Deep Copy
- 노드(Node) / 필드(Field)
- Dangling Pointer
'포트폴리오 > [IoT 기반 피지컬 AI 교육일지]' 카테고리의 다른 글
| [ 8일차 복습 ] 트리(Tree) 개념 정리 & 개인 프로젝트 개발계획서 작성 (0) | 2026.02.13 |
|---|---|
| [ 7일차 복습 ] Doubly Linked List & Queue & Deque (0) | 2026.02.11 |
| [ 5일차 복습 ] 프로젝트 안내 & 동적할당, 구조체 정리 (0) | 2026.02.10 |
| [ 4일차 복습 ] 포인터 응용 · 변수 영역 · 다차원 배열 (0) | 2026.02.10 |
| [ 3일차 복습 ] 함수 · 배열 · 포인터 기초 (0) | 2026.02.10 |