size_t가 unsigned int 이상 폭의 부호 없는 정수형인 환경에서 다음 코드를 실행한다. len이 SIZE_MAX일 때 발생할 수 있는 문제는?
size_t len = SIZE_MAX;
if (len + 1 <= 256) {
char *p = malloc(len + 1);
memcpy(p, src, len);
}정답 1번
SIZE_MAX에 1을 더한 size_t 값은 0으로 래핑된다. 따라서 크기가 256 이하인지 검사하는 조건을 통과하고, malloc에는 0이 전달되지만 memcpy에는 매우 큰 len이 전달된다. 이 복사는 유효한 할당 범위를 벗어나며 안전한 동작이 아니다. 덧셈 전에 len이 허용 최대 길이보다 작은지 확인하고, 할당 성공 여부도 검사해야 한다. unsigned라고 해서 산술 결과가 항상 입력보다 커지는 것은 아니다.
콘텐츠 정보
출제범위 기반 실전 연습을 위해 정처LAB이 독립 제작했습니다. 표시 연도는 학습 범위의 맥락이며 특정 시행 회차의 출제문항이나 복원 원문을 뜻하지 않습니다.
- 자료 유형
- 정처LAB 자체 제작
- 검수 상태
- 내용 검수 완료
- 해설 작성·검수
- 정처LAB 편집 기준
- 최종 검수
- 2026-09-26