【发布时间】:2016-12-16 17:27:06
【问题描述】:
我有一个类 _PDevice,它在 PDevice.cpp 中实现并在 PDevice.h 中声明
另外,在 PDevice.h 中,我添加了:
typedef QSharedPointer<_PDevice> DDevice;
现在,还有另一个类 QLDevice 继承了 _PDevice
QLDevice 也有一个公共成员:
QFile* m_file;
在另一个文件 Control.h 中,我声明:
DDevice m_device;
在文件 Control.cpp 中,在我添加的方法中:
m_device = DDevice(new QLDevice(filePath));
这会在 QLDevice 构造函数中设置 m_file:
m_file = &filePath;
之后,当我尝试调用 m_file->close() 时,它会抛出错误“未处理的异常在 QXDM.exe 中的 0x740DCB49:0xC0000005:访问冲突执行位置 0x00000000”
像这样:
if (m_file == NULL)
m_lastError = FCLOSE_NULL_ERR;
else
m_file->close();
我不明白我在哪里犯了错误。
一切正常,直到我调用 m_file->close()
有人可以帮我解决这个问题吗?
【问题讨论】:
-
您是否尝试过使用调试器?无论如何,如果没有所有相关代码,您就无法证明程序的任何其他部分没有调用未定义的行为并使所有诊断尝试都毫无意义。请参阅“寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定问题或错误以及重现它所需的最短代码 在问题本身中。没有明确的问题陈述的问题对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable example。"
-
type casting is going somewhere wrong为什么你认为类型转换与它有关?引用的错误没有提到这一点。我们是不是要猜你的意思?你只是在猜测吗?DDevice(new QLDevice(filePath))是否执行强制转换?显示DDevice和QLDevice的声明和继承关系。 -
m_file = &filePath;告诉我们filePath是什么类型以及它的值/地址来自哪里。我可以继续,一次只要求一条丢失的信息......但你为什么不自己调试它和/或发布所有代码。 -
我有根据的猜测是,
filePath已在一段时间前被销毁,留下m_file一个悬空指针。
标签: visual-c++ casting dynamic-cast reinterpret-cast static-cast