创建指针 C++ 时获取段错误

get segfault when creating a pointer c++

本文关键字:错误 段错误 获取 指针 C++ 创建      更新时间:2023-10-16

当我在在线 c++ 编译器上编译它时,我遇到了一个Segmentation fault错误。(引发错误的行将由代码中的注释指出(

#include <iostream>
#include <memory>
class A
{
};
class B:public A
{
};

using namespace std;
class Base
{
public:
    int b;
    std::shared_ptr<A> Display()
    {
        cout<<"Base: Non-virtual display."<<endl;
    };
    virtual void vDisplay()
    {
        cout<<"Base: Virtual display."<<endl;
    };
};
class Derived : public Base
{
public:
    int d;
    std::shared_ptr<B> Display()
    {
        cout<<"Derived: Non-virtual display."<<endl;
    };
    virtual void vDisplay()
    {
        cout<<"Derived: Virtual display."<<endl;
    };
};
int main()
{
    cout<<"Hello World"<<endl;
    Derived d;
    d.Display();
    Base *b = new Derived; // this line thorws the error
    b->vDisplay();
    return 0;
}

我有点困惑;如果我只是创建一个对象而不是指针,那就太好了。我哪里犯了错误?

错误实际上发生在前一行d.Display(); .控制流离开函数Derived::Display()而不返回std::shared_ptr<B>从而导致未定义的行为。

正如其他人所建议的那样,启用编译器警告和/或实际关注它们将是一个好主意。这是编译器倾向于实际警告程序中潜在的未定义行为的一种罕见情况。