运行时检查失败 #2 - 变量周围的堆栈'...'已损坏
Run-Time Check Failure #2 - Stack around the variable '...' was corrupted
我正在处理一个旧的C++项目并尝试调试以下函数:
inline void WriteByteList( /*[in]*/ PBYTE pbytSrc
, /*[in]*/ size_t tSrcSize
, /*[out]*/ LPWSTR pszDest
, /*[out]*/ size_t tDestSize ) {
wchar_t szItem[ 12 ], *pszNumber = &szItem[0];
size_t tSize = sizeof(szItem) / sizeof(szItem[0]);
for ( size_t tByte=0; tByte<tSize; tByte++ ) {
if ( tByte == 1 ) {
*pszNumber++ = L' ';
}
_ultow_s((unsigned long)pbytSrc[tByte], pszNumber, tSize, 10);
wcscat_s(pszDest, tDestSize, szItem);
}
}
我真的看不出代码有什么问题。
以下是产生问题的调用:
WriteByteList( (PBYTE)pProgramId->Byte, nliPROGRAM_ID_LEN, szMsg, tMsgSize );
pProgramId 指向一个结构,Byte 成员是一个由 8 个无符号字符组成的数组。 这包含以下值:
128, 0, 1, 1, 1, 1, 1, 1
nliPROGRAM_ID_LEN是一个常数,声明为 8。
szMsg 是一个声明为的数组:
wchar_t szMsg[500];
tMsgSize 是 szMsg 中的元素数:
tMsgSize = sizeof(szMsg) / sizeof(szMsg[0]);
当我循环访问此例程时,我得到:
local variable tSize initialised to 12
pszNumber initialised to point to szItem
循环迭代 0: szItem 包含 '128',后跟 0(空( pszDest 包含 '128'
循环迭代 1: szItem 包含 ' 0' pszDest 包含 '128 0'
循环迭代 2: szItem 包含 ' 1' pszDest 包含 '128 0 1'
循环迭代 3: szItem 包含 ' 1' pszDest 包含 '128 0 1 1'
循环迭代 4: szItem 包含 ' 1' pszDest 包含 '128 0 1 1 1'
循环迭代 5: szItem 包含 ' 1' pszDest 包含 '128 0 1
1 1 1'循环迭代 6: szItem 包含 ' 1' pszDest 包含 '128 0
1 1 1 1 1 1'循环迭代 7: szItem 包含 ' 1' pszDest 包含 '128 0
1 1 1 1 1 1 1'循环完成后,离开函数时将显示消息:
Run-Time Check Failure #2 - Stack around the variable 'szItem' was corrupted.
重写函数:
inline void WriteByteList( /*[in]*/ PBYTE pbytSrc
, /*[in]*/ size_t tSrcSize
, /*[out]*/ LPWSTR pszDest
, /*[out]*/ size_t tDestSize ) {
wchar_t szItem[ 12 ];
size_t tSize = sizeof(szItem) / sizeof(szItem[0]);
for ( size_t tByte=0; tByte<tSrcSize; tByte++ ) {
size_t tOffset = 0;
szItem[tOffset] = L' ';
if ( tByte > 0 ) {
tOffset++;
}
_ultow_s((unsigned long)pbytSrc[tByte], &szItem[tOffset], tSize - tOffset, 10);
wcscat_s(pszDest, tDestSize, szItem);
}
}
现在可以工作,没有任何错误。
相关文章:
- gdb错误:Backtrace已停止:上一帧与此帧相同(堆栈已损坏?)
- 变量周围的堆栈'...'已损坏
- 运行时检查失败 #2 变量"A"周围的堆栈已损坏
- 运行时检查失败 #2 - 变量"e"周围的堆栈已损坏。发生
- 运行时检查失败 #2 - 变量周围的堆栈'...'已损坏
- 运行时检查失败 #2 - 变量"l1"周围的堆栈已损坏
- 数组变量周围的堆栈已损坏
- 运行时检查失败 - 变量周围的堆栈已损坏
- 调试:运行时检查失败 #2 - 变量"LoggerThread"周围的堆栈已损坏
- 运行时检查失败 #2 - 变量"数字选择"周围的堆栈已损坏
- 运行时间检查:变量周围的堆栈已损坏
- 变量"name"周围的堆栈已损坏C++
- MS 工作室 17 变量周围的堆栈已损坏
- 错误:运行时检查失败 #2 - 变量周围的堆栈已损坏
- C++指针:数组的堆栈已损坏
- 变量周围的堆栈已损坏
- C++ 变量周围的堆栈已损坏
- 运行时检查失败 #2 - 变量周围的堆栈---已损坏
- VS2010和OpenCV:变量周围的堆栈已损坏
- 指针函数参数已损坏,堆栈已损坏