C++数组中的错误数字
C++ cout wrong number in array
我正在学习C++,当我运行下面的代码时,我发现一个奇怪的结果:
#include <iostream>
using namespace std;
int* arrayTest(){
int arr[3] = {1, 2, 3};
int * poi = arr;
return poi;
}
int main(){
int* arr = arrayTest();
for (int i = 0; i <3; i++){
cout << *(arr+i) << endl;
}
return 0;
}
结果是:
./a.out
1
0
167772160
这段代码有什么问题?
g++ --version
Apple LLVM version 9.0.0 (clang-900.0.38)
Target: x86_64-apple-darwin17.2.0
谢谢。
此函数的设计存在问题:
int* arrayTest() {
int arr[3] = {1, 2, 3};
int * poi = arr;
return poi;
}
变量arr
是一个局部变量(在官方C语言中,它具有"自动存储持续时间"(。这意味着一旦函数返回,与该数组关联的内存就会被回收和回收以供将来使用。
这里的问题是你已经做了一个指向数组的指针(poi
(。当你返回该指针时,它会指向arr
曾经在内存中的位置,只是,唉,从函数返回时,arr
已经洗牌了这个致命的线圈,不再存在。你现在有一个悬空的指针,这意味着它指向任何不幸的对象,恰好被放置在内存中arr
曾经所在的位置。这会导致未定义的行为,这意味着任何事情都可能发生(在您的情况下,程序会打印垃圾值。
相关文章:
- 输出错误,问题是找到总和5000位数字cpp
- 在使用堆栈为下一个最大数字编写代码时面临 SIGSEGV(分段错误)
- 错误含义;以二进制形式打印数字
- C++ 分段错误:11 错误,同时编码将两个数字相加的链接列表
- 我如何在一个 if 语句中声明所有数字我尝试通过其他方式声明所有数字,如果一个接一个,但似乎代码有逻辑错误
- 分布MPI散点错误的数字
- 涉及模运算符优先级的错误以及C++中具有大数字的括号
- Arduino IDE 错误 - 无法找到数字文字运算符"运算符""f900ff"
- 为什么C++显示错误的数字?
- 错误:数字常量 #define BOOT_PROTOCOL 0x00 之前的预期'>'
- 我的代码似乎在查找最大数字时存在语法错误
- Fibbonaci 递归代码返回错误值,始终返回下一个数字
- C++:按数字排序链表错误
- isdigit() 和 isalnum() 给出错误,因为输入是一个常量字符并且无法转换。其他可能查看输入是否为数字的方法?
- 一个数字的提升精神解析器的分段错误
- 错误:数字常数之前的预期无限制ID:std :: array和std ::向量大小分配
- C++数组中的错误数字
- 构造函数错误:错误:数字常量之前的预期“”,“”或“..”
- [错误]数字常量之前的预期标识符.-setlocale
- 错误:“数字”之前的预期类型说明符