배열·포인터와 안전한 샘플 버퍼
고정 크기 기록 버퍼를 만들고 경계·객체 수명·메모리 오류를 추적합니다.
진도 0%
레슨
- 자료형 크기와 정수 범위
sizeof와 고정 폭 정수로 기록 한 건의 저장 크기를 계산합니다.
- 배열과 포인터의 차이
배열 길이를 인자로 전달하고 NULL과 경계 밖 인덱스를 거부합니다.
- 구조체와 객체의 수명
샘플 구조체의 스택·정적·힙 수명을 비교하고 지역 주소 반환 오류를 수정합니다.
- 중단점으로 잘못된 접근 추적하기
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의 대응이 드러납니다.
- 하드웨어 의존 경계와 실패 처리의 선택 이유를 설명합니다.
- 미션별 측정·관찰 증거를 실제 실행한 결과로 남깁니다.