gpt4 book ai didi

c++ - 为什么我的执行结果是正确的,但是watch list结果是错误的?

转载 作者:行者123 更新时间:2023-11-28 08:19:46 25 4
gpt4 key购买 nike

我写了一个c++程序,当我使用 Debug模式时,我将一个指针类型变量(比如 m_pdummy)放入监视列表,但它显示“bad ptr”;

如果我展开这个指针(通过点击名称左边的“+”)并想看到这个指针下的其他变量,所有变量都显示“expression cannot be evaluated”;

但是,在我的代码中,我写了一些输出内容,例如:
CString str;
DWORD d1;
d1 = m_pdummy->m_wgear;
str.Format("%d");
消息框(str);
然后消息框显示正确的值;

但是,如果我将 m_pdummy、d1、str 拖入监视列表,它们都会显示“无法计算表达式”或“找不到符号”;但这是不可能的,因为消息框可以显示值;

那么这里的问题是什么?!

向阅读本文的人致以最诚挚的问候,谢谢!

马森

最佳答案

可能是您在错误的堆栈框架中。您列出的那些变量仅根据其存储期限存在。如果您超出该持续时间(例如,在进入函数之前或离开函数之后),则变量不存在。

例如,假设您有函数(左侧的行号):

20
21 int dbl (int x) {
22 int y = x + x + x;
23 y -= x;
24 return y;
25 }
26

x 的持续时间仅在 2125 行(y22 25)。在该持续时间之外观察变量的任何尝试都可能会导致您看到的消息。

对象也是如此,除非对象已被实例化,否则您将看不到成员变量。

另一种可能性是,即使一个对象已经被实例化,您可能需要全名,例如myObject->m_pDummy

它们是基于有限可用信息的猜测,但这是我首先要调查的事情。

关于c++ - 为什么我的执行结果是正确的,但是watch list结果是错误的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6289052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com