私はDirectX SDKのチュートリアルを見ていました。チュートリアル5は問題なく動作しますが、コードを自分のクラスにコピーして分割した後、アプリケーションの起動中に奇妙なエラーが発生しました。m = XMMatrixIdentity()後のクラッシュ - クラス内のメモリの魅力?
行は次のとおりです。
XMFINLINE _XMMATRIX& _XMMATRIX::operator=
(
CONST _XMMATRIX& M
)
{
r[0] = M.r[0];
r[1] = M.r[1];
r[2] = M.r[2];
r[3] = M.r[3];
return *this;
}
、エラーメッセージは次のとおりです:
g_World1 = XMMatrixIdentity();
それのために、私はそのように見えた= xnamathmatrix.intオペレーターにエラーが発生しました
Access violation reading location 0xffffffff
私はXMFLOAT4X4/XMMATRIXに接続された何らかの原因で発生する可能性があると読んでいます:
XMFLAT4X4を使用して行列を保存することを検討しましたが、XMMATRIXのみを使用しましたか?
私は既にXMMATRIXを使用していると思います。
MyClass.h:
private:
XMMATRIX g_World1;
MyClass.cpp:
void init(){
g_World1 = XMMatrixIdentity();
}
私はXMMATRIX g_World1を変更する必要がありますとは思いません。
タイプ「XMMATRIX」の右側のオペランドをとる(または全く許容される変換は存在しない)が見つかりませんエラーC2679:バイナリ「=」:それはのようなエラーを生成するためXMFLOAT4X4 g_World1に、全くオペレータは
問題は何ですか?
それは愚かな質問かもしれませんが、どうやってそれを達成するのですか?私は4つの行列(ビュー、世界など)を含む構造体Matrixを作成しましたが、構造体の位置合わせを16バイトで有効にする方法はありますか? – PolGraphic
VStudioの場合:プロジェクトプロパティ - >構成プロパティ - > C/C++ - >コード生成 - > Struct Memeber Alignment - >ここで16を選択してください –
GCCの場合、構造体には "__attribute__((aligned(16)))"があります –