void C_TRM::OnBnClickedActionOne()
{
int i,j,k;
int size=code.GetCount();
//判断是否有代码输入
if(current_data==" ")
{
if(MessageBox(_T("请先输入代码!"),LPCTSTR(_T("系统提示")),MB_ICONASTERISK)==IDOK)
return;
}
//遍历数组
for(i=0;i<size;++i)
{
//匹配条件 if((code[i].GetAt(0)==current_state)&&(code[i].GetAt(1)==current_data))
{
(*EDT[current_count]).Empty();
(*EDT[current_count]).AppendChar(code[i].GetAt(2));
current_state.Empty();
current_state=      code[i].GetAt(4); if((code[i].GetAt(3)==_T('r'))||(code[i].GetAt(3)==_T('R')))
{
++current_count;
//第curret指针显示
}
if((code[i].GetAt(3)==_T('l'))||(code[i].GetAt(3)==_T('L')))
{
--current_count;
}
else
{
if(MessageBox(_T("代码输入有误,请检查运行规则第四位"),LPCTSTR(_T("系统提示")),MB_ICONASTERISK)==IDOK)
         return;
} //更新全局变量的值
current_data.Empty();
    current_data=temp_data[current_count]; //判断是否停机
if(current_state=="*")
{
for(k=0;k<temp_len;k++)
{
if(*EDT[k]=="1")
m_RESULT.Append(*EDT[k]);
}
if(m_RESULT.GetLength()==0)
{
CString result("ACCEPT!");
m_RESULT.Append(result);
}
else
{
int count=m_RESULT.GetLength();
m_RESULT.Empty();
m_RESULT.Format(_T("%d"),count);
}
UpdateData(FALSE);
if(MessageBox(_T("咩哈哈!程序运行成功"),LPCTSTR(_T("系统提示")),MB_ICONASTERISK)==IDOK)
return;
}
大神门,到底哪里错啦调啦一天

解决方案 »

  1.   

    你这个吧,不管是代码质量还是逻辑还是可读性都比较差,很多变量不知道出处。简单判断还是内存越界,字符串操作引起的,比如这句:
    for(i=0;i<size;++i)
    如果访问的数组是size大小,最后一个肯定越界了,改成i++。
      

  2.   

    for(i=0;i<size;++i)
    如果访问的数组是size大小,最后一个肯定越界了,改成i++。
    ---------------------------------------------------------
    这个是没有问题的吧?
      

  3.   

    *EDT[current_count]
    --------------------------------
    LZ调试一下,看看是否是current_count造成的越界