函数返回值时提示Stack around the variable 'str' was corrupted

cqlinqiang 2013-05-10 03:39:44
想计算一个字符串data的校验码,校验码长度为一个字节,采用CRC8,生成多项式G(x) =x^8+x^7+ x^6+x^3+1 (111001001b)
用下面的函数运行后可以得到正确的效验码,但return时提示Stack around the variable 'str' was corrupted,请高手帮忙看一下哪里出错,谢谢

unsigned char CRC8 (unsigned char *data, int len)
{
unsigned char crc = 0;
CString data1,data2;
data1.Format(_T("%s"),data);
int n=0;
unsigned char str=0;
while (len--)
{
data2=data1.Mid(2*n,2);
sscanf(data2,"%x",&str);
//str=(unsigned char *)(LPCTSTR)data2;

CRC8_calc (str, &crc);
n+=1;
}
return crc;
}
static void CRC8_calc (unsigned char value, unsigned char *crc1 )
{
unsigned char i;
for (i=8; i>0; i--)
{
if ( (*crc1 ^ value) & 1 )
{
*crc1 = ( *crc1 >> 1 ) ^ 0x93;
}
else
{
*crc1 >>= 1;
}
value >>= 1;
}
}
...全文
1526 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-05-10
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。 判断是否越界访问,可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断,可将数组多声明一个元素,并设置数据读写断点在该多出元素对应的地址上。
cqlinqiang 2013-05-10
  • 打赏
  • 举报
回复
查了半天,发现是str定义小了,sscanf函数要定义成4个字节的 改成UINT str=0就搞定了
漫步者、 2013-05-10
  • 打赏
  • 举报
回复
那是因为你的数组越界了,你断点检查边界

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧