返回指向结构到主函数的指针,得到分段错误

0 c++

#include<iostream>
using namespace std;
struct sample
{
    int data[3][2];
};
struct sample* function()
{
    struct sample s;
    int c=1;
    for(int i=0;i<3;i++)
        for(int j=0;j<2;j++)
            s.data[i][j]=c++;

    cout<<"Matrix contents are ";
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<2;j++)
            cout<<s.data[i][j])<<"\t";
        cout<<"\n";
    }
    return &s;
}
int main()
{
struct sample *ss;
ss=function();
cout<<"Matrix contents are ";
for(int i=0;i<3;i++)
{
    for(int j=0;j<2;j++)
        cout<<ss->data[i][j]))<<"\t";
    cout<<"\n";
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)

这里有什么错误?当我该功能中显示内容它正在输出,但是当我尝试在该功能之外显示内容时它显示垃圾.怎么了?

Mar*_*off 6

你的s变量在堆栈上分配,然后你返回一个指向它的指针; 但是,当函数结束时,s不再存在,指针不再有效.

您可以动态分配s并返回指向它的引用/指针,也可以返回副本s而不是引用.

换句话说,你有一个悬空指针的情况.