C++引用错误
C++ reference bug
我试图理解c++引用是如何工作的,并试图编写下一个代码:
#include <iostream>
int& func();
int main()
{
std::cout <<func()<< std::endl;
system("pause");
return 0;
}
int& func()
{
int x = 23;
return x;
}
据我所知,函数中初始化的int x将在func结束后被擦除,然后函数返回的值将指向不存在的东西。但当我打印它时,我在控制台上得到了23。这怎么可能?
值被写入func()
内部的内存中,但返回后您在"不存在"中出错。为什么它不存在,还有什么东西覆盖了那段记忆吗?你不能确定。这是未定义的行为。
您只是从func()
返回一个内存地址,该地址在返回后可用于其他变量。但是,如果(现在可用的(内存地址没有被覆盖,它将保持值23.直到天结束;(
以下是@George对未定义行为的引用:https://en.cppreference.com/w/cpp/language/ub
此外,您的代码可能有一些错误。。。不管怎样,看看这个,它会解决你的烦恼可以使用局部变量';内存是否在其范围之外被访问?
相关文章:
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- C++引用错误
- 已定义函数时出现 G++ "未定义的引用"错误
- 错误:使用通用引用的声明冲突
- 链接 cmake 时出现未定义的引用错误
- 错误:未定义对'oboe::AudioStreamBuilder::openStream(oboe::AudioStream**)'的引用
- 链接器错误:未定义对"Reference_Genome::seq[abi:cxx11]"的引用
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 错误:无法解析对重载函数的引用;你的意思是调用它吗?
- 在 gtest 中初始化堆栈上的引用变量的隔离错误
- 运行时错误:引用绑定到类型为"int"的空指针
- 隐式重新解释引用时强制转换,没有警告/错误
- 只有级联分类器会发出未定义的引用错误
- 错误:未定义对cv::cudacodec::createVideoReader的引用
- 模板流运算符重载错误:引用初始化无效,与basic_istream和basic_ifstream之间的差异有关
- 对于我的 ComplexNumber 中的某些方法,我得到了一个奇怪的未定义错误引用.cpp,不过我对模板很陌生
- 从对象调用成员对象,错误:引用非常量值的初始值必须是左值
- Qt并发错误:引用非静态成员