안녕하세요. 최근 커스텀 엔진을 5.6.1 로 마이그레이션 하는 과정을 진행했습니다.
빌드 후 실행해보니, 곧바로 fatal error가 발생하여 로그와 콜스택을 확인했습니다.
<br/>
std::streamstring 생성 이후 삭제할 때 메모리를 누가 할당 했느냐 때문에 충돌이 발생하는 것으로 보입니다.
관련 이슈가 이미 stackoverflow에도 존재하는 것으로 보여, 마이그레이션 때문에 발생한 문제는 아닌 것으로 판단하고 있습니다.
<br/>
관련하여 도움이 될 만한 수정 커밋이 올라온 게 있을까요?
그게 아니라면 해당 내용에 대해서 에픽에서 대응 중인지 알 수 있을지, 패치 일정은 어떻게 되는지도 궁금합니다.
<br/>
HominLee1
(HominLee)
2
안녕하세요.
관련하여 내용 확인 후 답변드리도록 하겠습니다.
감사합니다.
HominLee1
(HominLee)
3
안녕하세요.
제공해주신 사례와 링크를 종합해 보면, 커스텀 엔진 소스나 플러그인에서 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으로 변환후 사용하시는 등의 주의를 기울이셔서 사용하시는 것을 권장드립니다.
감사합니다.
HominLee1
(HominLee)
4
안녕하세요.
말씀해주신 현상은 언리얼 엔진의 메모리 얼로케이터 이전에 stringstream이 먼저 할당되고, 이후 얼로케이터 동작 과정에서 메모리가 해제되면서 발생할 가능성이 있습니다.
이 경우, MallocAnsi 얼로케이터 방식으로 처리하시면 정상적으로 동작하여 문제가 해결될 가능성이 있으니 참고하시면 좋을 것 같습니다.
감사합니다