我在我的班级中分配动态内存作为 private: 变量
然后在构造函数中我试图初始化数组。
public
Display(int Width, int Height) {
nScreenHeight = Height;
nScreenWidth = Width;
DWORD dwBytesWritten = 0;
for (int i = 0; i < (nScreenWidth*nScreenHeight); i++) screen[i] = L'';
SetConsoleActiveScreenBuffer(hConsole);
}
private:
int nScreenWidth;
int nScreenHeight;
wchar_t *screen = new wchar_t[nScreenWidth*nScreenHeight];
如果我尝试运行该程序,则会抛出未处理的异常。
抛出未处理的异常:写访问冲突。this->screen 是 0x2096112。
尝试使用 L' ' 初始化缓冲屏幕时
在执行构造函数的主体之前,成员按照它们在类声明中出现的顺序进行初始化。那么会发生什么:
nScreenWidth
默认已初始化(请参阅此处)nScreenHeight
默认初始化screen
初始化为 new wchar_t[nScreenWidth*nScreenHeight]
nScreenWidth
和nScreenHeight
对所有成员使用初始化列表以避免混淆:
Display(int Width, int Height) :
nScreenWidth(Width), nScreenHeight(Height), screen(new wchar_t[nScreenWidth*nScreenHeight])
{
DWORD dwBytesWritten = 0;
for (int i = 0; i < (nScreenWidth*nScreenHeight); i++) screen[i] = L'';
SetConsoleActiveScreenBuffer(hConsole);
}
更好的是使用 a std::vector<wchar_t>
,构造函数将是
Display(int Width, int Height) :
nScreenWidth(Width), nScreenHeight(Height), screen(Width*Height)
{
...
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句