创建指针 C++ 时获取段错误
get segfault when creating a pointer c++
当我在在线 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>
从而导致未定义的行为。
正如其他人所建议的那样,启用编译器警告和/或实际关注它们将是一个好主意。这是编译器倾向于实际警告程序中潜在的未定义行为的一种罕见情况。
相关文章:
- 为什么PyImport_ImportModule python 3.7.2 中出现段错误?
- 为什么在访问 vtkRenderWindow 的"交互器"变量时会发生段错误?
- 全局向量导致 C++ 程序结束时出现段错误
- 为什么重载运算符<<打印特征类成员会导致段错误?
- 更改条件段错误
- 使用 TTF_RenderText() 加载字体时获取段错误 TTF_OpenFontRW()
- 注册对对象工厂的调用会导致段错误
- pthread_create在构造函数段错误中
- Nanoflann发现邻居提出段错误
- C++ 中的构造函数、继承、堆栈、堆、this-pointer 和段错误
- 具有unique_ptr的 CRTP 会导致段错误
- 增强纤维work_stealing屏障会导致段错误
- 当我返回指向结构的指针向量时出现段错误
- C++为什么我的代码没有爆炸/段错误?
- Pthread段错误,使用指向main中变量的指针
- C++ 模板中的段错误
- 相当于Windows/MSVC上的段错误?
- 为什么我的 LLVM JIT 实现出现段错误?
- 为什么访问我的引用捕获变量会导致我的 lambda 函数出现段错误?
- 为什么自删除的全局 Vulkan 实例仅在添加层时才导致段错误?