如何解决保留/删除导致输出在 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。我什至在在线 ide 上尝试过这段代码,但同样的事情也发生在那里。
解决方法
您的代码存在多个问题,特别是 somefn()。首先,这不是指针的工作方式,您需要在 somefn() 中动态创建“节点”的实例。 “temp”和“temp2”是局部变量,当函数返回时它们超出范围,这意味着节点实例是在堆栈上创建的,并且在 somefn() 之外“不再可用”。 C++ 将此指定为“未定义行为”,也就是任何可能发生的情况。
其他问题是你应该使用“#include”来引入std::cout(“bits/”不是标准的,听起来像一些内部目录),虽然在C++中技术上没有错误你应该使用“nullptr”(或“ 0") 而不是 NULL。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。