C++数组中的错误数字

C++ cout wrong number in array

本文关键字:错误 数字 数组 C++      更新时间:2023-10-16

我正在学习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曾经所在的位置。这会导致未定义的行为,这意味着任何事情都可能发生(在您的情况下,程序会打印垃圾值。