포트폴리오/[IoT 기반 피지컬 AI 교육일지]

[ 6일차 복습 ] 노드 구조체와 메모리 관리

개발자혜콩 2026. 2. 10. 16:51

1. 오늘 학습내용

① 프로젝트 설계

  • 프로젝트 구현 전 추상적인 순서도 반드시 작성
    • 전체 흐름을 먼저 눈으로 확인
  • 재귀 호출 사용해보기
    • 교재: ch2 p.61 참고

② 메모리 누수 확인 방법

  • 리눅스 명령어 top
    • CPU 사용량
    • 메모리 사용 현황
    • 실행 중인 프로세스 상태 확인 가능
  • 프로그램 실행 후 메모리 사용이 계속 증가하면
    • 메모리 누수 의심

③ 셸로우 카피 vs 딥 카피

  • Shallow Copy (얕은 복사)
    • 주소만 복사
    • 같은 메모리를 공유
    • 의도한 경우면 괜찮음
    • 의도하지 않으면 충돌 위험
  • Deep Copy (깊은 복사)
    • 실제 데이터(원소 하나하나) 복사
    • 서로 독립적인 메모리 사용

④ 자료구조 — LinkedList 기본 동작

  • 필수 기능
    1. 추가 add
    2. 삭제 remove
    3. 목록 출력 list
    4. 수정 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