UE 5.6.1 std::streamstring의 Free 시 GetAllocationSizeExternal 크래시 관련

안녕하세요. 최근 커스텀 엔진을 5.6.1 로 마이그레이션 하는 과정을 진행했습니다.

빌드 후 실행해보니, 곧바로 fatal error가 발생하여 로그와 콜스택을 확인했습니다.

<br/>

std::streamstring 생성 이후 삭제할 때 메모리를 누가 할당 했느냐 때문에 충돌이 발생하는 것으로 보입니다.

관련 이슈가 이미 stackoverflow에도 존재하는 것으로 보여, 마이그레이션 때문에 발생한 문제는 아닌 것으로 판단하고 있습니다.

<br/>

관련하여 도움이 될 만한 수정 커밋이 올라온 게 있을까요?

그게 아니라면 해당 내용에 대해서 에픽에서 대응 중인지 알 수 있을지, 패치 일정은 어떻게 되는지도 궁금합니다.

<br/>

안녕하세요.

관련하여 내용 확인 후 답변드리도록 하겠습니다.

감사합니다.

안녕하세요.

제공해주신 사례와 링크를 종합해 보면, 커스텀 엔진 소스나 플러그인에서 std::stringstream을 사용하면서 발생한 이슈로 보입니다.

에픽게임즈의 코딩규칙에서는 문자열사용시 FString, FName, FText를 사용할 것을 권장하고 있습니다.

std::stringstream을 포함한 표준 라이브러리의 문자열 기능은 외부코드와의 연동(interop) 과 같은 특수한 경우를 제외하면 사용을 지양하라고 안내하고 있습니다. 아래 링크에서 자세히 확인하시면 좋을 것 같습니다.

[[링크]](Epic C++ Coding Standard for Unreal Engine | Unreal Engine 5.6 Documentation | Epic Developer Community)

불가피하게 플러그인 등에서 std::stringstream등의 표준라이브러리 문자열기능을 사용하셔야 한다면,

생성,소멸을 내부에서 안전하게 처리함과, 엔진쪽으로 값을 전달할 때는 FString으로 변환후 사용하시는 등의 주의를 기울이셔서 사용하시는 것을 권장드립니다.

감사합니다.

안녕하세요.

말씀해주신 현상은 언리얼 엔진의 메모리 얼로케이터 이전에 stringstream이 먼저 할당되고, 이후 얼로케이터 동작 과정에서 메모리가 해제되면서 발생할 가능성이 있습니다.

이 경우, MallocAnsi 얼로케이터 방식으로 처리하시면 정상적으로 동작하여 문제가 해결될 가능성이 있으니 참고하시면 좋을 것 같습니다.

감사합니다