有这么个函数
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?? 在线等待高手的出手
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?? 在线等待高手的出手
断点停在这里,但这句话还没有执行啊,当然不会得到正确的值啊。
不过那个地址上没有被初始化,这个值,用16进制显示,就是ccccccc,这样的。
从运行的结果看小弟我也知道这个时候已经生成了sizeTotal对象 并且还没对其赋值
但这句话按道理不是还没执行吗?这个对象是什么时候生成的呢?如果像 踏雪无痕 说的那样是进入该函数就已经分配的话 那么第一个断点出 就应该会给sizeLine对象分配了 而结果显示并没有给sizeLine分配 望不吝赐教 多谢
基本上明白了 按照您的说法 那我把原来的程序改成这样
oid CGdiView::OnInitialUpdate()
{
//CScrollView::OnInitialUpdate();
CSize sizeTotal(800,1020);//第一个断点处
CSize sizeLine=CSize(sizeTotal.cx/100,sizeTotal.cy/100);//第二个断点处
}
那么第一个断点处是函数后的第一个执行语句,是首先进栈的,那么这个时候是不是sizeTotal ,800,1020 三个都已经分配内存了,只是没有初始化而已,其地址内的内容为都为0xcccccccc??? 多谢赐教!!!
--
是指,调用函数后的第一个执行语句,用来恢复栈的。
如:
OnInitialUpdate();
DoSomeThing();则在调用OnInitialUpdate时,第一个入栈的是DoSomeThing的地址