为什么引用传递会导致此崩溃(C++)
Why does pass by reference cause this to crash (C++)?
我遇到了一些奇怪的行为,我真的不知道该去哪里。
基本上,我有一组类,其中一个类应该用另外两个类的实例来构造。我正在使用pass-by-reference来分配资源,但第二次分配在我的机器上崩溃了。我不明白为什么第二个作业失败了,但第一个作业很好。为了让这更令人困惑,我尝试在一个在线cpp编译器中重新创建这个问题,但它在那个环境中似乎运行得很好。
我模糊了类名,并删除了一些似乎与这个问题无关的方法。有人有什么想法吗?
#include <iostream>
using namespace std;
class Driver{};
class ITransmission{};
class ManualTransmission : public ITransmission {};
class Car
{
public:
Car(ITransmission &trans, Driver &driver);
private:
ITransmission *m_trans;
Driver *m_driver;
};
Car::Car(ITransmission &trans, Driver &driver)
{
*m_trans = trans;
*m_driver = driver; // <-- **** Crashes here!?!? ****
}
int main()
{
ITransmission *trans = new ManualTransmission();
Driver *driver = new Driver();
Car car(*trans, *driver);
return 0;
}
*m_trans
和*m_drivers
只是指向它们各自类型的指针。它们本身不是对象。在您的副本构造函数中,您正在调用
*m_trans = trans
它崩溃是因为m_trans
没有指向任何东西,而您正在取消引用它。你想要的是
m_trans = &trans
m_driver = &driver
这将指针设置为指向您传入的对象的地址,而在您尝试分配给指向的对象之前。
相关文章:
- 当回溯以零开始时,如何调试崩溃
- 内联映射初始化的动态atexit析构函数崩溃
- 执行函数时导致崩溃的变量
- 程序崩溃并显示"std::out_of_range"错误
- CoInitialize()在单独的线程上崩溃而不返回
- 使用调试/崩溃报告将应用程序部署到客户端
- 为什么所有C++编译器都会崩溃或挂起此代码
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 为什么我的多线程作业队列崩溃
- ExtractIconEx:可以工作,但偶尔会崩溃
- 为什么引用传递会导致此崩溃(C++)
- 试图创建流或fopen时程序崩溃
- 类对象数组的问题会导致崩溃
- 排序时无法执行交换操作.我做的时候它会崩溃.为什么
- 为什么要增加导致崩溃的指针
- 在虚幻引擎中删除NXOpen对象时崩溃
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- Visual Studio在尝试读取resource.txt文件时崩溃
- 将方法转换为调用该方法的成员函子对象会导致崩溃