运行时检查失败 #2 - 变量周围的堆栈'length'已损坏
Run-Time Check Failure #2 - Stack around the variable 'length' was corrupted
大家好,
我正在修改我们的应用程序以支持unicode特性。因此,在进行更改时,我必须转换所有char到wchart,我们有一些包装流类,我转换为支持wchar_t。现在我的问题是在进行更改时对于下面的代码,我遇到了运行时检查失败#2-堆叠变量"length"已损坏。不过如果我继续,我会得到正确的值。请让我知道如何消除这个错误。
FDIStream&
FDIStream::
operator>>(std::wstring& data)
{
if (CanReadData())
{
int length = -1;
*this >> length;
if (length >= 0)
{
// See if length is a valid value (not pass eof)
if (length > GetLength()) {
throw FDException("Corrupted file");
}
wchar_t* buffer = new wchar_t[length];
try
{
ReadBytes(buffer, length);
data = std::wstring(buffer,length);
} catch (...)
{
delete[] buffer;
throw;
}
delete[] buffer;
}
}
return *this;
}
假设生产者写入流的length
的值是通过data.length()
获得的,那么它表示字符串中字符的数量,而不是字节数量。根据它的名称,我认为ReadBytes
正在尝试length
字节,这就是问题所在。您需要读取length
个字符。
此外,如果您试图向流中写入length
字节而不是length
字符,那么生产者中可能存在镜像错误。
相关文章:
- gdb错误:Backtrace已停止:上一帧与此帧相同(堆栈已损坏?)
- 变量周围的堆栈'...'已损坏
- 运行时检查失败 #2 变量"A"周围的堆栈已损坏
- 运行时检查失败 #2 - 变量"e"周围的堆栈已损坏。发生
- 运行时检查失败 #2 - 变量周围的堆栈'...'已损坏
- 运行时检查失败 #2 - 变量"l1"周围的堆栈已损坏
- 数组变量周围的堆栈已损坏
- 运行时检查失败 - 变量周围的堆栈已损坏
- 调试:运行时检查失败 #2 - 变量"LoggerThread"周围的堆栈已损坏
- 运行时检查失败 #2 - 变量"数字选择"周围的堆栈已损坏
- 运行时间检查:变量周围的堆栈已损坏
- 变量"name"周围的堆栈已损坏C++
- MS 工作室 17 变量周围的堆栈已损坏
- 错误:运行时检查失败 #2 - 变量周围的堆栈已损坏
- C++指针:数组的堆栈已损坏
- 变量周围的堆栈已损坏
- C++ 变量周围的堆栈已损坏
- 运行时检查失败 #2 - 变量周围的堆栈---已损坏
- VS2010和OpenCV:变量周围的堆栈已损坏
- 指针函数参数已损坏,堆栈已损坏