2014-10-28 1 views
0

구조체 내에 행렬을 저장하려고 시도하는 중에 XMLoadFloat4X4()을 사용하여 구조체에서 XMFLOAT4x4* 유형을 호출 할 때 런타임에 어설 션 오류가 발생합니다. DirectX 11 : XMLoadFloat4X4()를 사용하는 런타임 어설 션 오류

XMFLOAT4X4 *f4x4_Scale; 
XMFLOAT4X4 *f4x4_Rotation; 
XMFLOAT4X4 *f4x4_Translate; 
XMFLOAT4X4 *f4x4_ObjectViewSpace; 

는 아마도 구조체의 내부 XMFLOAT4x4* 위치에서의 실제 값을로드 :

enter image description here

값은 간단히 저장된다.

XMMATRIX Entity::Scale(float x, float y, float z){ 
    XMMATRIX m_Scale = XMLoadFloat4x4(e_Asset.Asset.FileDesc.matrixTransformation.f4x4_Scale); 
    m_Scale = XMMatrixScaling(x, y, z); 
    return m_Scale; 
} 

디스 어셈블리는 XMLoadFloat4x4() 함수 자체 내부에서 휴식을 나타내고 있지만 실제로 이해할 수

는 I과 같은 변환 기능, 구조의 내부 XMLoadFloat4X4() 전화. enter image description here

XMLoadFloat()과 관련하여 어설 션 오류 문제를 해결하는 데 사용할 수있는 방법이 있습니까? (또는 어설 션 오류에 관한 정말 좋은 자료) 그리고/또는 나는 잘못된 것을하고 있습니까?

업데이트 :

척 Walbourn 제안으로 XMLoadFloat4X4()에 대한 (XMFLOAT4X4)*pSource 포인터가 함수에 대한 어설 조건을 만족 NULL했다. 건네지는 포인터는 처음에는 초기화되지 않았고 포인터를 설정하려고 시도했다.

시계가 설정되었고, XMFLOAT4X4 값은 XMStoreFloat4X4()을 사용하여 매트릭스 동일성으로 초기화되었다.

XMMATRIX Identity = XMMatrixIdentity(); 
XMStoreFloat4x4(&e_Asset.Asset.FileDesc.matrixTransformation.f4x4_Scale, Identity); 

마지막 범인

는 변환 기능이 너무 많은 과부하를하였습니다 단지 사실이었고, 나는 이전부터 길 잃은 디버깅 단계를 (필자는 기능 중 하나에 새로운 XMFLOAT4X4 변수를 설정하고 초기화되지 않습니다) 놓쳤다. 문제가 해결되었습니다.

답변

1

DirectXMath는 라이브러리의 공유 소스이므로 디버거의 기능으로 바로 들어갈 수 있습니다.

/------------------------------------------------------------------------------ 
_Use_decl_annotations_ 
inline XMMATRIX XMLoadFloat4x4 
(
    const XMFLOAT4X4* pSource 
) 
{ 
    assert(pSource); 
#if defined(_XM_NO_INTRINSICS_) 

당신이 e_Asset.Asset.FileDesc.matrixTransformation.f4x4_Scale 포인터가 실제로 여기에 설정되어 생각하십니까 :

XMLoadFloat4x4의 유일한 어설 입력 포인터를 확인하기 위해 널이?

+0

생성자'Entity() {e_Asset ... sformation.f4x4Scale = new XMFLOAT4X4 (...)}'에 값을 설정하려고했습니다 (단위 매트릭스를 수동으로 입력). 나는 다른 방법을 시도 할 수 있습니다. –

+0

& psource **는 런타임시 ** NULL입니다. –

+0

왜 힙이 개별적인''XMFLOAT4X4'' 인스턴스를 할당할까요? Entity 클래스에 값 멤버로 넣기 만하면됩니다. –