ChaosEngineInterface.cppのFChaosEngineInterface::GetCurrentScene関数内でクラッシュが発生しました。
Exception 0xc0000005 encountered at address 0x7ffe51a4ef98: Access violation reading location 0xffffffffffffffff
下記のInHandleのmemory accessによるもののようでした。
[Image Removed]
関数内でInHandleをチェックしnullptrを返すようにしているものの、nullptrではない場合通過してしまうため対処が必要そうです。
`FChaosScene* FChaosEngineInterface::GetCurrentScene(const FPhysicsActorHandle& InHandle)
{
if(!InHandle)
{
return nullptr;
}
Chaos::FPBDRigidsSolver* Solver = InHandle->GetSolverChaos::FPBDRigidsSolver();
return static_cast<FChaosScene*>(Solver ? Solver->PhysSceneHack : nullptr);
}`対処方法についてご回答宜しくお願い致します。
どうやら衝突判定を経由して無効なpointerにaccessしクラッシュしていたようですが、原因は
USkeletalMeshComponent::SetPhysicsAsset
でphysics assetを切り替えたことが起因となりクラッシュが発生するようでした。
physics assetを切り替える前に
GetMesh()->SetCollisionResponseToAllChannels(ECR_Ignore); GetMesh()->SetCollisionEnabled(ECollisionEnabled::Type::NoCollision); GetMesh()->SetPhysicsAsset(DefaultPhysicsAsset);
で衝突判定を切った後physics assetを切り替えるよう変更した場合クラッシュの発生は確認されなくなりました。
お世話になっております。
社内外からの既存の報告をチェックしたのですが、現在のところ、再現性のある類似の報告は確認できておりません。
また、いただいた情報を元に、当方でもThirdPersonテンプレートを利用して再現プロジェクトの構築を試み、USkeletalMeshComponent::SetPhysicsAssetによる物理アセットの切り替えなどを行ったのですが、再現できていない状況です。
InHandleがダングリング参照を掴んでいるのが問題と思われるため、FChaosEngineInterface::GetCurrentScene()内で対応を行うことが難しく、そうした状況の発生源に対する対応を行う必要がありますが、それにはクラッシュの再現が必要となります。ご使用中の物理アセットの内容、あるいは、用途などに何か特殊な点など、なにか思い当たる点はございませんでしょうか?
もし再現プロジェクトをご提供いただけるようであれば、大変助かります。
以上、よろしくお願いいたします。