在已立坏了程序内部状态的xxx.exe中发生了缓冲区溢出。

在已破坏了程序内部状态的xxx.exe中发生了缓冲区溢出。。。
long byteVal[4];
long byteValmove[4];

long strlen=0;
long bytelen=0;

// long outByte[500];
//memset(&outByte,0,sizeof(outByte));

unsigned char StringBuf[3000];
CString strid;
char idbuf[100];

HMODULE hDll;  //DLL句柄
lpAddFun  addFun;//函数指针

lpdisplayFun  displayFun;


for(int i=0;i<seleNumber;i++)
{
// memset(&outByte,0,sizeof(outByte));

strlen=infor[i].zw.GetLength()+1;

bytelen=strlen/12-1;

memset(&StringBuf,0,sizeof(StringBuf));

CStringA strBuf(infor[i].zw);

strcpy((char*)StringBuf,strBuf);

HexToChar(StringBuf);



for(int k=0;k<bytelen;k++)
{

memset(&byteVal,0,sizeof(byteVal));
memset(&byteValmove,0,sizeof(byteValmove));

byteVal[0]=StringBuf[k*12]*16+StringBuf[k*12+1];
byteVal[1]=StringBuf[k*12+3]*16+StringBuf[k*12+4];
byteVal[2]=StringBuf[k*12+6]*16+StringBuf[k*12+7];
byteVal[3]=StringBuf[k*12+9]*16+StringBuf[k*12+10];

//infor[i].zwByte[k]=byteVal[3]*256+byteVal[2]*256+byteVal[1]*256+byteVal[0];
byteValmove[0]=byteVal[0];
byteValmove[1]=byteVal[1]*256;
byteValmove[2]=byteVal[2]*256*256;
byteValmove[3]=byteVal[3]*256*256*256;
infor[i].zwByte[k]=byteValmove[3]+byteValmove[2]+byteValmove[1]+byteVal[0];
}

//调用动态链接库中的函数


strid=infor[i].zcm;


CStringA strcS(strid);

strcpy(idbuf,strcS);
////////////////////////////FKCnvchk2310

hDll=LoadLibrary(_T("FKCnvchk2310.dll"));
//hDll=LoadLibrary(_T("dllToUsedll.dll"));
if(hDll!=NULL)
{
addFun=(lpAddFun)GetProcAddress(hDll,"FKConvPIS4ToXXX");//???????FKConvPIS4ToXXX
//displayFun=(lpdisplayFun)GetProcAddress(hDll,"display");

if(addFun!=NULL)
{
long result=addFun(idbuf,infor[i].zwByte,infor[i].outByte);

//infor[i].zwByte=outByte;

//memcpy(infor[i].zwByte,outByte,bytelen);

//MessageBox(_T("调用函数成功!"));
}
else
{
MessageBox(_T("调用函数失败!"));
}
//MessageBox(_T("调用成功!"));
FreeLibrary(hDll);
}
else
{
int error=GetLastError();
char err;
err=error;
CString strerr;
strerr=_T("调用失败,错误代码为:");
strerr+=err;
AfxMessageBox(strerr);
continue;

}
}


不知道什么原因,每次一运行到一个函数的时候,程序就会跳转到一个_Crt_DefaultAllocHook函数的地方,弹出对话框,提示“在已损坏了程序内部状态的 xxx.exe 中发生了缓冲区溢出。按“中断”以调试程序,或按“继续”以终止程序。”
大家遇到过这样的问题吗?是什么原因导致的呢?
------解决方案--------------------
断点停下来,调试查看出错的代码
------解决方案--------------------
调用堆栈呢?转到最近的自己的代码处,查看变量
------解决方案--------------------
第九次估计已经溢出了...
------解决方案--------------------
没看懂代码干啥的...其实贴这种代码还不如不贴,里面一堆东西都未知的,想判断都力不足...
通常说,这种错误一般都是是读/写内存越界导致的,如果能重现,那其实就比较简单了,只要想办法找到报错的代码行,检查下相关的内存/变量是否正常就知道该咋整;若是在执行DLL函数出问题,则需要检查下传的参数对不对...

另几点:
1、为啥要循环 LoadLibrary、GetProcAddress、FreeLibrary ?不可以只做一次吗?
2、long strlen 这种变量名还是少用吧,和标准C函数重名了
3、 if (hDll!=NULL) 的 else 部分,里面用了个 continue ,多余的吧,这已经是循环的最后一行语句了
4、int error=GetLastError();
   char err;
   err=error;
这种保存错误号的还是第一次见呐,有啥玄机解释下?

说的比较泛,望有助