在一个cpp文件的首部声明了全局变量
并赋初值为零
int i_bz=0;
然后调用CView的成员函数:
void CWhjView::OnMenuLength() 
{
 int k;
  ... ...
 k=i_bz;
 n[k]=r_mouse[1]-r_mouse[0];
 n1=n[0];
 ... ...
}
程序出错。
发现在调试的过程中,i_bz变成了-842150451,请问这是怎么回事儿?
我如何能够在成员函数中仍然让它保持0值?

解决方案 »

  1.   

    无法确定全局变量初始化的时机,最好用一个全局函数返回函数内部静态变量的方法来达到相同的目的,这样当你调用该函数时,该变量一定是初始化好的,trust me!
      

  2.   

    直接用
    static int i_bz=0;
    就可以了,
    像你那样定义,系统是不会为变量分配内存空间的,
    只用加上static修饰符才那能为变量分配内存空间,
    但是在程序里面就不能对i_bz进行修改了,要不然就会出错!
      

  3.   

    weibo79的方法是正确的,只是定义为static以后还是可以修改变量的值的,只要没有定义为const.
      

  4.   

    定义和使用不在同一个cpp文件的全局变量,应该这样吧。
    void CWhjView::OnMenuLength() 
    {
     int k;
     extern int i_bz;
      ... ...
     k=i_bz;
     n[k]=r_mouse[1]-r_mouse[0];
     n1=n[0];
     ... ...
    }
      

  5.   

    同意楼上的,由于楼主已经说过
    "在一个cpp文件的首部声明了全局变量
    并赋初值为零
    int i_bz=0;"
    这应该已经说明此全局变量在定义时就已被初始化了.未能取得正确的值的原因大约是楼上所说的"定义和使用不在同一个cpp文件的全局变量".