私はこのような種類の見えDirectX 11のヘルパークラスを作成してい呼び出すとき:dxClass = new DXClass();
Initialize()
機能が別の方法で呼び出されます。このクラスには、次のように初期化されC++アクセス違反インスタンスメソッド
#import "DXClass.h" // I have declared the constructor and the other methods here
// All of the DirectX libraries are imported in the header as well
DXClass::DXClass()
{
// Pointers created, etc.
}
DXClass:~DXClass()
{
// Other DirectX objects released
// With an if (bbSRView) {}, the exception still occurs, so bbSRView is not NULL
// bbSRView is a ID3D11ShaderResourceView*
// When the other violation does not occur, one does here:
bbSRView->Release();
bbSRView = NULL;
// More releases
void DXClass::Initialize()
{
SetupDisplay();
// Other initialization that works fine
}
void DXClass::SetupDisplay()
{
// This is where the debugger shows the access violation.
// factory is declared as DXGIFactory*
HRESULT hr = CreateDXGIFactory(__uuidof(IDXGIFactory), (void **)&factory);
// Loop through adapters and outputs, etc.
}
dxClass
を作成したクラスの
アプリケーションが実行されると、setupDisplay()
関数の始めにアクセス違反が発生します。しかし、setupDisplay()
にコードを入れてInitialize()
に入れ、setupDisplay()
への呼び出しを削除すると、アクセス違反は発生しません。また、setupDisplay()
からコードを削除して空の関数にしてからInitialize()
で呼び出すと、アクセス違反は発生しません。
ポインタがNULLでないようで、上記のようにポインタが変更された場合、アプリケーションは正常に起動します。ただし、別のノートでは、終了時にアプリケーションが別のアクセス違反を受け取ります。デバッガはID3D11ShaderResourceView*
のRelease()
コールを指していますが、これは私のコードスニペットで指摘しています。このポインタも有効です。
私も同様の質問をチェックしましたが、クラスのthis
ポインタが有効であるように見え、オーバーフローする可能性のあるバッファを作成していません。また、オブジェクトを早期に削除/解放することはできません。
エラーの原因は何もわかりません。 :/
ありがとう:D
EDIT: はここで同じエラーが発生して、分離されたテストです:私のApp
クラスで
INT APIENTRY wWinMain(HINSTANCE, HINSTANCE, LPWSTR, INT)
{
App *app = new App();
app->Run();
app->Release();
}
、私はすべて削除されている:私は私の主な機能にしている ウィンドウの機能性およびその他の変数を変更すると、次のようになります。
App::App()
{
dxClass = new DXClass();
}
App::~App()
{
delete dxClass;
}
void App::Run()
{
dxClass->Initialize();
while (true) {} // Never reaches here
}
同じ場所。工場インスタンス変数を次のように置き換えた場合も同様の結果が得られます。
IDXGIFactory *f;
HRESULT hr = CreateDXGIFactory(__uuidof(IDXGIFactory), (void **)&f);
これは他のアプリケーションで役に立ちました。
エラーはコードに表示されているのではなく、コードを使用する場所のどこかにあります。最小限の自己完結型のテストケースを作り、断片ではなく*を*投稿する。 –
私は、何が起こっているのかについてここに十分な情報があるとは思わない。ところで、あなたはCComPtrを使うべきです、それはあなたの人生をはるかに簡単にするでしょう:http://msdn.microsoft.com/en-us/library/ezzw7k98(v=vs.80).aspx – dsharlet
問題を引き起こしている、 'factory'はどこからも出てこない。コードはそれを示していません。 –