- 首先,我不知道該向量是否可以作爲「全局向量」調用,如果我在名稱空間下聲明它,但不在類中或功能。 -訪問全局向量時出現「訪問衝突讀取位置」
我正在爲我的遊戲編寫一個簡單的Irrlicht(http://irrlicht.sourceforge.net)包裝來使事情變得更簡單和容易,但是最近當嘗試push_back在全局中聲明的向量時出現「訪問衝突讀取位置」錯誤範圍。
這是到目前爲止我的代碼:
irrwrap.cpp:
namespace irrw
{
//.........
IrrlichtDevice *device;
IVideoDriver *driver;
irr::core::array<irr::video::ITexture*> TextureCollector;
vector<int> TextureConnector;
//.........
}
//..............
void irrInit(int iGraphicsDriver, int iWindowWidth, int iWindowHeight, int iScreenDepth, bool bFullScreen)
{
E_DRIVER_TYPE drvT;
if(iGraphicsDriver == GD_SOFTWARE)
drvT = EDT_SOFTWARE;
else if(iGraphicsDriver == GD_D3D8)
drvT = EDT_DIRECT3D8;
else if(iGraphicsDriver == GD_D3D9)
drvT = EDT_DIRECT3D9;
else if(iGraphicsDriver == GD_OPENGL)
drvT = EDT_OPENGL;
//..............
irrw::device = createDevice(drvT, dimension2d<u32>(iWindowWidth, iWindowHeight), iScreenDepth, bFullScreen);
irrw::driver = irrw::device->getVideoDriver();
//..................
}
void irrLoadImage(irr::core::stringc szFileName, int iID, int iTextureFlag)
{
//........
irrw::TextureCollector.push_back(irrw::driver->getTexture(szFileName)); // the call stack pointed to this line
irrw::TextureConnector.push_back(iID);
}
main.cpp中:
//.........
INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT)
{
//.........
irrInit(GD_OPENGL, 800, 600, 16, false);
irrLoadImage("picture.jpg", 100, 1);
//.........
}
和錯誤:
Unhandled exception at 0x692804d6 in Game.exe: 0xC0000005: Access violation reading location 0x00000558.
現在我真的不知道如何解決這個問題LEM。
任何形式的幫助,將不勝感激:)
下面是一些原型:
virtual ITexture* getTexture(const io::path& filename) = 0;
typedef core::string<fschar_t> path; // under 'io' namespace
typedef char fschar_t;
typedef string<c8> stringc;
typedef char c8;
僅供參考,我使用MSVC++ 2008 EE。
(CODE修訂版)
irrw :: driver-> getTexture(sFileName)是否有可能產生AV而不是push_back? 「讀取地址0x00000558」看起來可能會追逐一個NULL指針;是irrw ::驅動程序初始化? – 2009-10-15 12:47:30
是的。我編輯了我的帖子並添加了一些額外的代碼行,以顯示irrw :: driver已經初始化。你在說什麼這個'AV'? – 2009-10-15 13:08:46
AV =訪問衝突 – 2009-10-15 13:29:00