有这么个函数
void CGdiView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
CSize sizeTotal(800,1020);//1
CSize sizeLine=CSize(sizeTotal.cx/100,sizeTotal.cy/100);//2
}
我分别在 1 跟 2 的这两行设置了断点
当分步执行时,第一次停在 第1个断点时 调试结果显示   sizeTotal{cx=-858993460,cy=-858993460}
              第二次停在 第2个断点时 调试结果显示   sizeTotal.cx=800,sizeTotal.cy=1020;  sizeLine{cx=-858993460,cy=-858993460}
我不明白的是既然在断点暂停了,那么sizeTotal这个局部对象 在第一个断点处应该还没有构造 连内存都还没分配 怎么会有值呢?而且为什么显示的值会是-858993460?? 在线等待高手的出手

解决方案 »

  1.   

    在第一步时,生成了sizeTotal对象,此时,构造函数还没有运行,因此,对象里的cx和cy都是默认值。
      

  2.   

    当到第一个断点的时候,sizeTotal没有构造,它里面的值是随机不定的啊,到第二个断点的时候,sizeTotal已经构造了,但sizeLine没有构造了
      

  3.   

    CSize sizeTotal(800,1020);//1 
    断点停在这里,但这句话还没有执行啊,当然不会得到正确的值啊。
      

  4.   

    因为在编译的时候,这个函数里面需要多少的栈空间都知道了,因为每一个变量的空间的位置都是固定好了的,
    不过那个地址上没有被初始化,这个值,用16进制显示,就是ccccccc,这样的。
      

  5.   

    又见五岭兄 呵呵  多谢
    从运行的结果看小弟我也知道这个时候已经生成了sizeTotal对象  并且还没对其赋值  
    但这句话按道理不是还没执行吗?这个对象是什么时候生成的呢?如果像 踏雪无痕 说的那样是进入该函数就已经分配的话 那么第一个断点出 就应该会给sizeLine对象分配了   而结果显示并没有给sizeLine分配  望不吝赐教   多谢
      

  6.   

    多谢五岭散人
    基本上明白了 按照您的说法 那我把原来的程序改成这样
    oid CGdiView::OnInitialUpdate()
    {
    //CScrollView::OnInitialUpdate();
    CSize sizeTotal(800,1020);//第一个断点处
    CSize sizeLine=CSize(sizeTotal.cx/100,sizeTotal.cy/100);//第二个断点处

    那么第一个断点处是函数后的第一个执行语句,是首先进栈的,那么这个时候是不是sizeTotal ,800,1020 三个都已经分配内存了,只是没有初始化而已,其地址内的内容为都为0xcccccccc???   多谢赐教!!!
      

  7.   

    函数后的第一个执行语句
    --
    是指,调用函数后的第一个执行语句,用来恢复栈的。
    如:
    OnInitialUpdate();
    DoSomeThing();则在调用OnInitialUpdate时,第一个入栈的是DoSomeThing的地址