【问题标题】:type casting is going somewhere wrong in VC++类型转换在 VC++ 中出现问题
【发布时间】: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)) 是否执行强制转换?显示DDeviceQLDevice的声明和继承关系。
  • m_file = &amp;filePath; 告诉我们filePath 是什么类型以及它的值/地址来自哪里。我可以继续,一次只要求一条丢失的信息......但你为什么不自己调试它和/或发布所有代码。
  • 我有根据的猜测是,filePath 已在一段时间前被销毁,留下 m_file 一个悬空指针。

标签: visual-c++ casting dynamic-cast reinterpret-cast static-cast


【解决方案1】:
QFile*      m_file

此成员未初始化,因此您应该检查它的创建位置以及是否调用了适当的初始化方法。

【讨论】:

  • m_file 不为空。我在调用 m_file->close() 之前正在检查它
  • @VishalKhemani 因此为什么你应该向我们展示你所有的代码,这样你就不会浪费每个人的时间来提出一堆关于你没有费心向我们展示的细节的无关问题。
  • 我没有说它是 NULL,但是根据异常我可以假设它是 NULL,我说 - 未初始化。
猜你喜欢
  • 2021-01-27
  • 2020-02-14
  • 2011-11-17
  • 1970-01-01
  • 1970-01-01
  • 2012-10-01
相关资源
最近更新 更多