现象说明:
2011年6月22日,自己编译的exe程序在用户虚拟机上运行起来就出错退出,此现象只在此一台机器上出现,其他机器和开发机器均不出现此问题,此程序代码量很大,此种情况一时无法解决。
最终解决方案:
在同事的帮助下,使用windbg工具,远程调试客户机器,找到原因所在及问题出错位置和函数,出错位置为获取用户硬盘序列号的时候,buf[20]全部为空格,在左右空格并两两颠倒的时候操作内存越界,程序报错退出。
源码如下:
void AdjustString(char* str, int len)
{
char ch;
int i,j;
int len1;
// 若是右对齐的,调整为左对齐 (去掉左边的空格)
i=0;
while(i<len && str[i]==' ') i++;
// 去掉右边的空格
j = len - 1;
while(j>=0 && str[j]==' ')
{
str[j] = '/0';
j--;
}
//此处为增加的异常处理 ,如果str全部为空