Visual Studio 中的错误结果

Posted

技术标签:

【中文标题】Visual Studio 中的错误结果【英文标题】:wrong result in Visual Studio 【发布时间】:2017-11-24 09:47:55 【问题描述】:

我以前从未遇到过这种错误。当我在 CodeBlock 中编译时,我的代码运行良好,但是当我将代码复制到 VS(2015 社区)时,它只显示了两个数字。 (我正在打印一棵二叉树)

这是二叉搜索树的代码,它在 CodeBlocks 中运行良好,但在 Visual Studio 中却不行

#include<iostream>
using namespace std;
struct node

    int data;
    int balance_factor;
    node* left_linker;
    node* right_linker;
;

struct binary_tree

    node* root;
;

void init_tree(binary_tree& in_tree);
node* create_new_node(int data);
void insert_node(int in_data,binary_tree& in_tree);
node* insert_recursively(int in_data,node* in_root);
bool tree_empty(binary_tree& in_tree);
void print_tree_from_root(node* in_root);

int main(int argc,char* argv[])

    binary_tree tree_1;
    init_tree(tree_1);
    insert_node(10,tree_1);
    insert_node(30,tree_1);
    insert_node(40,tree_1);
    insert_node(20,tree_1);
    insert_node(50,tree_1);
    print_tree_from_root(tree_1.root);

void init_tree(binary_tree& in_tree)

    in_tree.root = NULL;

node* create_new_node(int data)

    node* temp = new node;
    temp->data = data;
    temp->left_linker = NULL;
    temp->right_linker = NULL;
    return temp;

void insert_node(int in_data,binary_tree& in_tree)

    if(tree_empty(in_tree))
    
        in_tree.root = create_new_node(in_data);
    
    else
    
        insert_recursively(in_data,in_tree.root);
    


node* insert_recursively(int in_data,node* in_root)

    if(in_root == 0)
    
        in_root = create_new_node(in_data);
        return in_root;
    
    else
    
        if(in_data > in_root->data)
        
            in_root->right_linker = insert_recursively(in_data,in_root->right_linker);
        
        else if(in_data < in_root->data)
        
            in_root->left_linker = insert_recursively(in_data,in_root->left_linker);
        
    


bool tree_empty(binary_tree& in_tree)

    if(in_tree.root == 0)
        return true;
    return false;


void print_tree_from_root(node* in_root)

    if(in_root == NULL)
    
        return;
    
    else
    
        cout<<in_root->data<<endl;
        print_tree_from_root(in_root->left_linker);
        print_tree_from_root(in_root->right_linker);
    

【问题讨论】:

请不要将代码发布为图片。创建一个minimal reproducible example 并将其作为文本发布。 别忘了用语言标记(我猜是 C++?),当你这样做时,实际上问一个问题 不全是代码,问题出在编辑器上,在VisualStudio中,上面的结果不对 如果您真的认为 Visual Studio 有问题,我们无法帮助您。我们只能为您的代码提供帮助。但很有可能,错误在您的代码中。 是c++还是c?我编辑了问题以删除图像并插入实际代码。 @nvoigt(作为对您的第一条评论的评论) 【参考方案1】:

insert_recursively 在进入else 块时不会返回值,但是无论如何您将返回的值(垃圾)存储在right_linkerleft_linker 中。

注意编译器会发出相应的警告:

警告 C4715:“插入递归”:并非所有控制路径都返回值

【讨论】:

我找到了问题,谢谢,但我还是不明白为什么 CodeBlocks 会打印所有的值

以上是关于Visual Studio 中的错误结果的主要内容,如果未能解决你的问题,请参考以下文章

visual-studio-code 中的自动右括号不适用于 js 和 jsx 文件

Visual Studio 性能探查器中的错误结果

visual studio 2010问题修复

Visual Studio 2013 中的 LoadTestException 错误

使用 FluentAssertion 时 Visual Studio 警告 CA1806 的错误识别(不要忽略方法结果)

如何解决Visual Studio 2010 Ultimate中的CVT1100?