错误使用指针或错误?

Ame*_*men 2 c++ pointers

我遇到了一些相当奇怪的东西,我找不到任何合理的东西.我写了一个像这样的函数返回一个像这样的int指针:

int* arr()  
{  
  int array[3]={1,2,3};  
  return array;  
}
Run Code Online (Sandbox Code Playgroud)

现在在main中,我声明了一个像k这样的int指针:

int*k=arr();
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但这是奇怪的事情,我只能使用其中一个块,k [0]或k [1]或k [3],它会打印正确的相应数字,但是当想要使用它时a这样只有第一个才能正确打印:

for(int i=0;i<3;i++)
{
  cout<<k[i]<<endl;
}
Run Code Online (Sandbox Code Playgroud)

对于k [0],打印值是正确的,但对于其他人来说这是奇怪的.我想知道如果我没有使用指针,为什么我可以访问每个块?

Bat*_*eba 6

int array[3]={1,2,3};是堆栈分配的.它将在函数结束时超出范围.

你将访问一个悬空指针.这是未定义的行为.繁荣!


Tor*_*zki 5

您将返回指向在函数堆栈上创建的对象(此处为数组)的指针.例如,您可以使用std :: vector将数组从函数传递给调用者.

std::vector< int > arr()
{
    std::vector< int > array = { 1, 2, 3 };
    return array;
} 
Run Code Online (Sandbox Code Playgroud)