异常 尝试初始化动态数组时未处理
Exception Unhandled while trying to initialize dynamic array
我正在将类中的动态内存分配为私有:变量
然后在构造函数中,我尝试初始化数组。
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];
如果我尝试运行该程序,则会抛出异常。
引发未经处理的异常:写入访问冲突。这个>屏幕是0x2096112。
尝试使用 L' ' 初始化缓冲区屏幕时
Memeber 按照它们在执行构造函数主体之前在类声明中出现的顺序进行初始化。所以发生的事情是:
-
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);
}
更好的是使用std::vector<wchar_t>
,构造函数将是
Display(int Width, int Height) :
nScreenWidth(Width), nScreenHeight(Height), screen(Width*Height)
{
...
与其为三/五规则而烦恼,不如依靠零规则。
相关文章:
- 为什么我的 2D 数组未定义?
- 结构数组 - 未引用的局部变量
- 具有空构造函数使数组未初始化会使计算速度变慢
- C 数组未从文件中获取正确的输入
- 使用指标后数组未修改
- 为什么在指针和数组的情况下,字符数组的处理方式不同
- 对于循环和并行数组:未声明的标识符
- C++ 成员数组未初始化
- 数组未加载 - "index out of range in objectAtIndex()"
- 数组未在此范围内声明
- C 数组未申报的标识符错误
- 二维数组未正确初始化
- 动态字符数组未提供正确的字符串长度
- 是否可以像数组一样处理 std::vector
- 字符* 数组出现"multiple definitions"错误,但无符号字符数组未显示错误
- 结构的类数组未正确初始化
- 数组未正确分配
- 二维数组未显示正确的输出
- C++字符数组错误处理
- 数组未被默认初始化