Devin.KR

배열·포인터와 안전한 샘플 버퍼

고정 크기 기록 버퍼를 만들고 경계·객체 수명·메모리 오류를 추적합니다.

진도 0%

레슨

  1. 자료형 크기와 정수 범위

    sizeof와 고정 폭 정수로 기록 한 건의 저장 크기를 계산합니다.

  2. 배열과 포인터의 차이

    배열 길이를 인자로 전달하고 NULL과 경계 밖 인덱스를 거부합니다.

  3. 구조체와 객체의 수명

    샘플 구조체의 스택·정적·힙 수명을 비교하고 지역 주소 반환 오류를 수정합니다.

  4. 중단점으로 잘못된 접근 추적하기

    LLDB 중단점·변수 관찰과 주소 검사기로 버퍼 초과를 추적합니다.

배열·포인터와 안전한 샘플 버퍼 미션

m01-pc-workbench의 산출물을 이어받습니다. 독립 starter에도 직전 모듈의 검증된 산출물을 포함합니다. 센서 기록기와 상태 표시 장치를 PC에서 완성합니다.

요구사항

  • 앞 모듈의 샘플을 timestamp_ms·raw 구조체 16개 버퍼에 보관하고 길이·소유권 계약 및 디버거 관찰 기록을 추가합니다.
  • C 코드는 gcc -std=c11 -Wall -Wextra -Werror로 빌드하고 Python 보조 코드는 표준 라이브러리만 사용합니다.
  • buffer.c의 push/get을 구현하고 이전 main.c·sensor.c·check.py 회귀 검사를 유지합니다. raw는 0~4095, 가득 차면 새 기록 거부, 실패 시 길이·과거 기록·출력 객체 유지 계약입니다.
  • make test는 DEBUG.md 필수 항목과 수정 버퍼 UBSan을 확인합니다. bash check.sh는 별도 자식의 ASan 진단 및 수정본 무진단, LLDB 관찰값과 정상 종료를 검증합니다. 환경 밖 검증은 verify=external로 표시합니다.
  • record-buffer는 토큰 순서마다 100ms 가상 시각을 부여합니다. INVALID/FULL도 시간을 소비하고 최대 100만 토큰 입력 가정을 유지합니다. 내부 주소 대신 Sample 값을 복사합니다.
  • LLDB 실행이 환경 정책으로 막히면 DEBUG.md에 실제 오류와 관찰 미완료를 기록합니다. stdout 근거를 LLDB 관찰로 대신 적지 않습니다.

완료 기준

  • make test가 종료 코드 0으로 끝나며 이전 모듈 회귀와 새 버퍼·CLI·UBSan 검사를 통과합니다. 외부 환경의 bash check.sh는 ASan과 실제 LLDB 관찰까지 추가 확인하며 샌드박스에서는 PENDING입니다.
  • 0·16·17건에서 경계 정책을 확인하고 sanitizer 검사에서 수정본의 오류가 없으며 디버거 기록에 실패 위치·인덱스·수명이 포함됩니다.
bash check.sh
미션 시작 코드
모범 답안모범 답안 내려받기

검토 기준

  • 요구사항과 테스트 fixture의 대응이 드러납니다.
  • 하드웨어 의존 경계와 실패 처리의 선택 이유를 설명합니다.
  • 미션별 측정·관찰 증거를 실제 실행한 결과로 남깁니다.