读书人

局部变量类乎提前被清除了

发布时间: 2012-07-08 17:43:44 作者: rapoo

局部变量好像提前被清除了?
void GetMyNum( WCHAR *pMyNum,DWORD *pdwChars )
{
BYTE pNum[]={0x23,0x45,0x56,0x34,0x4f,0xff,0xff,0xff};

//这里 dwChars必须声明为 const DWORD,不然会被提前清除,不知道为什么?
DWORD dwChars = sizeof( pNum )*2;

if( pdwChars )
{ *pdwChars = dwChars; }

if( !pMyNum )
{ return; }

for( UINT i=0; i< sizeof( pNum ) ; i++ )
{
WCHAR myChar[2]={0};
_stprintf( myChar,_T("%02x"), pNum[i] );
_tcsncat( pMyNum, myChar, 2 );
}

//运行到这里时,dwChars被置为零了,有时候甚至提示 access violation ,搞不懂了

//替换 f为 空格
for( UINT i=0; i< dwChars; i++ )
{
if( towlower( pMyNum[i] ) == _T('f') )
{ pMyNum[i] = _T(' '); }
}


}
//-----------------------------------------

求解,dwChars为什么必须声明为 const DWORD ?


[解决办法]
_tcsncat( pMyNum, myChar, 2 );

内存越界了吧
[解决办法]
不可能被提前清除的,局部变量会在函数调用完清除。

[解决办法]
不应该为0,除非在这中间有修改该变量的。
[解决办法]
不要总在错误提示的地方找错误,要学会推理,跟踪
[解决办法]
也许错误出在其他函数,因为非法访问内存,把这里的变量改了。

读书人网 >C++

热点推荐