설계 중인 C 버퍼 확장 API가 호출자가 제공한 출력 슬롯 char **buffer와 size_t *capacity를 받는다고 하겠습니다. *buffer는 유효한 할당 영역을 소유하며, 요청 크기는 0보다 크고 현재 용량보다 크다고 가정합니다.
realloc의 결과를 곧바로 *buffer에 대입하면 할당 실패 시 유일한 소유 포인터가 널로 덮입니다. C11 초안에 따르면 이 실패는 기존 객체를 변경하지 않으며 할당도 유지합니다. API는 여전히 해제해야 하는 저장 공간에 접근할 경로를 잃게 됩니다.
임시 포인터를 쓰면 갱신 시점을 분명히 할 수 있습니다. 실패하면 할당 실패를 알리고 두 출력 슬롯을 그대로 둡니다. 성공하면 반환된 포인터와 새 용량을 전달합니다. 성공적인 교체는 기존 객체의 수명도 끝내므로, 반환된 주소가 우연히 같더라도 저장해 둔 별칭을 계속 사용할 수는 없습니다.
성공 뒤에는 호출자가 별칭을 다시 구성해야 한다는 요구를 명시한다면, 성공 또는 실패 결과와 이 출력 규칙만으로 충분하겠습니까?
