保留/删除c++中导致输出变化的cout语句



考虑这段代码-

#include<bits/stdc++.h>
using namespace std;
struct node{
char symbol;
node * left = NULL;
node * right = NULL;
};

node * somefn(node *ptr){
node temp;
node temp2;
temp.left = &temp2;
temp.symbol = 'b';
ptr = &temp;
return ptr;
}
int main(){
node *ptr;
ptr = somefn(ptr);
cout<<(ptr->symbol)<< "n"; // this statement
if(ptr->left->left != NULL) cout<<"this shldnt print";
return 0;
}

当我执行这个保持第一个cout语句时,我得到了输出-

b
this shldnt print

但是,当删除第一个cout语句时,不会打印任何内容(第二个cout也不会打印)。为什么会有这种不一致的行为?我使用的是gcc版本5.4.0。我甚至在网上尝试过这个代码,但同样的事情也发生了。

您的代码有多个问题,特别是somefn()。首先,这不是指针的工作方式,你需要创建"node"动态地在somefn()中。"temp"one_answers";temp2"是局部变量,当函数返回时,它们会超出作用域,这意味着节点实例是在堆栈上创建的,并且"不再可用"。在somefn()之外。c++将此定义为"未定义行为"。也就是一切皆有可能。

其他问题是你应该使用"#include "引入std::cout ("bits/"不是标准的,听起来像一些内部目录),虽然在c++中没有技术错误,但你应该使用"nullptr"(或"0")而不是NULL。

最新更新