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 );
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”
szItem包含“0”
pszDest包含“128 0”
循环迭代2:
szItem包含“1”
pszDest包含“128 0 1”
循环迭代3:
szItem包含“1”
循环迭代4:
pszDest包含“128 0 1 1 1”
循环迭代5:
pszDest包含“128 0 1 1 1 1”
循环迭代6:
szItem包含“1”
循环迭代7:
szItem包含“1”
Run-Time Check Failure #2 - Stack around the variable 'szItem' was corrupted.