Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Visual Studio 2010调试“;如果(var==NULL)";不触发 已解决-构造函数的问题_C++_Visual Studio 2010_Null_If Statement - Fatal编程技术网

C++ Visual Studio 2010调试“;如果(var==NULL)";不触发 已解决-构造函数的问题

C++ Visual Studio 2010调试“;如果(var==NULL)";不触发 已解决-构造函数的问题,c++,visual-studio-2010,null,if-statement,C++,Visual Studio 2010,Null,If Statement,并指出了Node(int)调用Node()的重载构造函数不起作用的问题 谢谢大家 我已经建立了一个程序(我正在调试它),并遇到了一个奇怪的问题。。。'if'语句在应该触发时未被触发。。。这是一个学校项目,我们必须建立一个AVL树,其中至少有一个“优化”功能 我确信并且已经测试了“rdown”和“ldown”的作用(作为平衡因素)——树不是完全平衡的。相反,它基于分支的高度(即-`balance()`应该只返回(1,0,-1),否则它是不平衡的 我希望这些信息足以解决这个奇怪的问题……在Micr

并指出了
Node(int)
调用
Node()
的重载构造函数不起作用的问题 谢谢大家


我已经建立了一个程序(我正在调试它),并遇到了一个奇怪的问题。。。'if'语句在应该触发时未被触发。。。这是一个学校项目,我们必须建立一个AVL树,其中至少有一个“优化”功能

我确信并且已经测试了“rdown”和“ldown”的作用(作为平衡因素)——树不是完全平衡的。相反,它基于分支的高度(即-`balance()`应该只返回(1,0,-1),否则它是不平衡的

我希望这些信息足以解决这个奇怪的问题……在Microsoft Visual Studio 2010中,我从未遇到过类似的情况

节点结构: 导致问题的搜索功能
第一次遇到循环<代码>的屏幕截图

第二次遇到
for循环的屏幕截图
如果您在底部的“Autos”选项卡中注意到,所有数据和节点本身的地址都是
NULL
——但在下一个屏幕截图中,它将继续

节目继续!!!什么?>! 我按下了F-10(“转到下一个命令”按钮)…它就跳到了语句的上方?为什么?

tmpNode
在任何屏幕截图中都不为空


它首先是
0x00294820
,然后是
0xcdcdcdcdcd
。第二个是未初始化
malloc
ed内存的调试值。

0xcdcdcdcdcd
不是空指针-该值在MSVC的调试构建中用于已分配但未初始化的内存

有关更多详细信息,请参阅

问题的根源可能在采用
int
参数的构造函数中:

Node (int dat) { Node(); data = dat; } 

Node();
语句最后什么也不做。此构造函数使结构的大多数成员未初始化。

tmpNode
引用的是未初始化的内存,通常不保证为null。例如,以下语句不保证
tmpNode
为null

Node* tmpNode;  // or assignment to another uninitialized variable.

您将<代码> TMPNoCT<代码>指定为<代码>根>代码>,我怀疑<代码>根>代码>未初始化,因此“代码> TMPNoCT的非空值。请检查您的初始化<代码>根<代码>——我不能对此发表评论,因为您没有张贴此特定代码。(但不保证是)
0

在第二个/第三个屏幕截图中,
tmpNode=0xcdcdcdcdcd
,它不是
NULL
0xcdcdcdcd
是Visual Studio给未初始化变量的值(运行调试版本时)

确保初始化所有节点的字段:

Node* root = NULL;
or
Node* root = new Node(); //Don't forget to delete!

<> >在C++中自动设置字段为空,因为它在java和C语言等其他语言中是自动完成的。

屏幕截图是从两个不同的运行中来的——我想添加插图…如果你在第一个截图中注意到,LFIG是代码> null <代码>,在运行时没有地方可以把它变成一个“非null”值,它是W一次只关注一次运行可能会更清晰。第二,
lchild
在任何屏幕截图中也不是
NULL
。第一个是0xcdcdcdcdcd。是的,但是
Node()在启动时会被调用
它将
lchild
rchild
定义为
NULL
——调用为:
Node*tmpNode=new Node(num)
我不想包含所有的代码,但是:root=
AVL_Tree::root
它是类的一部分并且是初始化的,所以问题是我如何发现这个问题?-为什么编译器在
if
代码中不包含
\if#DEBUG
语句。这似乎是一个容易避免的错误?@Wallter:@Michael:很好,我明白了为了集中精力解决这个问题,我没有添加
AVL_-Tree
的类定义。root是AVL_-Tree->AVL_-Tree:root的成员
Node* tmpNode;  // or assignment to another uninitialized variable.
Node* root = NULL;
or
Node* root = new Node(); //Don't forget to delete!