Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.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++ 奇怪的printf()结果_C++ - Fatal编程技术网

C++ 奇怪的printf()结果

C++ 奇怪的printf()结果,c++,C++,在结构drzewo.root->value中,我有'5' 我这样打印它,然后调用函数findNodeWithValue(): 此函数的定义如下: Node* findNodeWithValue(Node * wierzcholek, int value) { printf("%d \n", wierzcholek->value); } 该计划的结果是: 五, 4200289 为什么? 以下是整个程序:我怀疑drzewo.root未初始化,指向堆栈上的某个地方,

在结构drzewo.root->value中,我有'5'

我这样打印它,然后调用函数findNodeWithValue():

此函数的定义如下:

Node* findNodeWithValue(Node * wierzcholek, int value) {
    printf("%d \n", wierzcholek->value);
}
该计划的结果是:

五,

4200289

为什么?


以下是整个程序:

我怀疑
drzewo.root
未初始化,指向堆栈上的某个地方,下一个函数调用推送的数据会修改指向的值

编辑

现在我们有了完整的源代码,我们看到这确实发生了,或多或少:在
insert()
中,您不需要分配新节点,只需在堆栈上声明它。一旦离开
insert()
的作用域,引用该节点的内存就不再合法

幸运的是,这很容易解决,只需正确分配新节点:

drzewo.root = new Node;
drzewo.root->value = value;

如果要删除结构,必须记住删除节点。

我怀疑
drzewo.root
未初始化,并指向堆栈上的某个位置,下一个函数调用推送的数据会修改指向该位置的值

typedef struct Node NODE;

struct Node {
    int value;
    NODE * left = NULL;
    NODE * right = NULL;
    NODE * parent = NULL;
    bool parentLeft;
};

struct Tree {
    int levels;
    int n;
    NODE * root = NULL;
};

Tree drzewo;
编辑

现在我们有了完整的源代码,我们看到这确实发生了,或多或少:在
insert()
中,您不需要分配新节点,只需在堆栈上声明它。一旦离开
insert()
的作用域,引用该节点的内存就不再合法

幸运的是,这很容易解决,只需正确分配新节点:

drzewo.root = new Node;
drzewo.root->value = value;

如果要删除结构,必须记住删除节点。

我怀疑
drzewo.root
未初始化,并指向堆栈上的某个位置,下一个函数调用推送的数据会修改指向该位置的值

typedef struct Node NODE;

struct Node {
    int value;
    NODE * left = NULL;
    NODE * right = NULL;
    NODE * parent = NULL;
    bool parentLeft;
};

struct Tree {
    int levels;
    int n;
    NODE * root = NULL;
};

Tree drzewo;
编辑

现在我们有了完整的源代码,我们看到这确实发生了,或多或少:在
insert()
中,您不需要分配新节点,只需在堆栈上声明它。一旦离开
insert()
的作用域,引用该节点的内存就不再合法

幸运的是,这很容易解决,只需正确分配新节点:

drzewo.root = new Node;
drzewo.root->value = value;

如果要删除结构,必须记住删除节点。

我怀疑
drzewo.root
未初始化,并指向堆栈上的某个位置,下一个函数调用推送的数据会修改指向该位置的值

typedef struct Node NODE;

struct Node {
    int value;
    NODE * left = NULL;
    NODE * right = NULL;
    NODE * parent = NULL;
    bool parentLeft;
};

struct Tree {
    int levels;
    int n;
    NODE * root = NULL;
};

Tree drzewo;
编辑

现在我们有了完整的源代码,我们看到这确实发生了,或多或少:在
insert()
中,您不需要分配新节点,只需在堆栈上声明它。一旦离开
insert()
的作用域,引用该节点的内存就不再合法

幸运的是,这很容易解决,只需正确分配新节点:

drzewo.root = new Node;
drzewo.root->value = value;


如果要删除结构,必须记住删除节点。

我的理论是,您试图引用的局部变量超出了
findNodeWithValue()的范围。
。当第一个函数返回时,程序流更改为
findNodeWithValue(Node*wierzcholek,int-value)
。堆栈被销毁,所有局部变量也随堆栈一起销毁。因此,指向节点的指针将指向存储有随机值的随机位置。

我的理论是,您试图引用的局部变量超出了
findNodeWithValue()的范围。
。当第一个函数返回时,程序流更改为
findNodeWithValue(Node*wierzcholek,int-value)
。堆栈被销毁,所有局部变量也随堆栈一起销毁。因此,指向节点的指针将指向存储有随机值的随机位置。

我的理论是,您试图引用的局部变量超出了
findNodeWithValue()的范围。
。当第一个函数返回时,程序流更改为
findNodeWithValue(Node*wierzcholek,int-value)
。堆栈被销毁,所有局部变量也随堆栈一起销毁。因此,指向节点的指针将指向存储有随机值的随机位置。

我的理论是,您试图引用的局部变量超出了
findNodeWithValue()的范围。
。当第一个函数返回时,程序流更改为
findNodeWithValue(Node*wierzcholek,int-value)
。堆栈被销毁,所有局部变量也随堆栈一起销毁。因此,指向节点的指针将指向存储有随机值的随机位置。

能否提供一个最小的可编译示例?能否发布节点结构/类定义?可能
value
未初始化。不要只发布随机片段。按照已经提出的要求,提交一份报告。您应该在自己的调试过程中这样做,在这个过程中,您几乎肯定会发现问题。因此,这是一项至关重要的技能。没有SSCCE,这是无法回答的(正如Lightness所指出的)。但是有一件事:
findNodeWithValue()
不会返回任何内容。您能提供一个最小的可编译示例吗?您能发布节点结构/类定义吗?也许
value
没有初始化。不要只发布随机片段。按照已经提出的要求,提交一份报告。您应该在自己的调试过程中这样做,在这个过程中,您几乎肯定会发现问题。因此,这是一项至关重要的技能。没有SSCCE,这是无法回答的(正如Lightness所指出的)。但是有一件事:
findNodeWithValue()
不会返回任何内容。您能提供一个最小的可编译示例吗?您能发布节点结构/类定义吗?也许
value
没有初始化。不要只发布随机片段。按照已经提出的要求,提交一份报告。哟
typedef struct Node NODE;

struct Node {
    int value;
    NODE * left = NULL;
    NODE * right = NULL;
    NODE * parent = NULL;
    bool parentLeft;
};

struct Tree {
    int levels;
    int n;
    NODE * root = NULL;
};

Tree drzewo;