代码如下:CString m_Sequence[16];
//用调试器查看,m_Sequence[0]~m_Sequence[15]的值依次为:+Ca,-Si,-Fe,-Na,-K,-Mg,-Cl,-P,-S,-Al,,这样的值//但是发现m_Sequence[]在下面的代码中被改变了,不知道为什么
for(j=0;j<16;j++)
{
if(pAnalyte->m_Sequence[j][0] == '-')
pAnalyte->expFac[j] = 0.0;
else
pAnalyte->expFac[j] = rhs[l++];
}
上面的for循环看似没有改变m_Sequence[]的值,但是m_Sequence[]的值却在j循环到12的时候被置空了
用vc6的变量监视器查看m_Sequence[]的值,循环在12次之前没有问题,
但当j变为13时,发现m_Sequence[0]和m_Sequence[1]变为""
当j变为14时,发现m_Sequence[2]和m_Sequence[3]也变为""

解决方案 »

  1.   

    我分析。
    问题不是出在循环内。
    循环内唯一做的就是比较。
    比较会返回true or false.
    不涉及赋值呀。
      

  2.   

    m_Sequence[j][0]
    =========
    这样引用CString数组可以吗?
      

  3.   

    if(pAnalyte->m_Sequence[j][0] == '-')改成
    if(pAnalyte->m_Sequence[j].Left(1) == '-')
      

  4.   

    应该是在CString m_Sequence[16];前面的声明的某个变量 ,
    在 if(pAnalyte->m_Sequence[j][0] == '-')
            pAnalyte->expFac[j] = 0.0;
        else
            pAnalyte->expFac[j] = rhs[l++];
    这些语句执行后内存溢出了。 
      

  5.   

    pAnalyte->m_Sequence[j][0],你试试当字符串是一空串的时候
      

  6.   

    m_Sequence[j][0]是没有问题的。如果就这样的一个循环出现问题,那一定是pAnalyte->expFac[j]越界了。贴出你pAnalyte那个类的定义就知道了。
      

  7.   


    内存越界啊。说的已经很明白了。你要单步每个语句都进去看看。 而不是仅在for语句这个。