我正在研究QNX/Blackberry 10应用程序。我的应用程序最近开始崩溃。插入跟踪语句导致我相信在以下情况下会发生崩溃。我的QNX/BB10 C++应用程序崩溃,一个简单的C++对象似乎已损坏
我的客户端应用程序调用一个内部函数,并将它传递给一个C++类对象。传递的C++类如下所示:当我访问_computerName
或_uuidDevice
成员变量调用函数返回后出现
class ALPeerData
{
public:
ALPeerData();
virtual ~ALPeerData();
int _peerId;
ALModelType _modelType;
std::wstring _computerName;
std::wstring _uuidDevice;
. . .
};
崩溃。被调用函数中的跟踪显示ALPeerData
对象成员变量符合预期。因此,该函数内的_computerName.size()
返回一些合理的东西,例如10,但在客户端应用程序中调用时返回的大小约为23 MB。 The ALPeerData
对象似乎已损坏。
我在这里列出了文档的原因QCC -V输出:
user:~$ qcc -V
cc: targets available in /home/bbndk/host_10_3_1_12/linux/x86/etc/qcc:
4.6.3,gcc_ntoarmv7le_gpp
4.6.3,gcc_ntox86_gpp
4.6.3,gcc_ntoarmv7le_cpp-ne
4.6.3,gcc_ntoarmv7le_cpp
4.6.3,gcc_ntox86 (default)
4.6.3,gcc_ntoarmv7le
4.6.3,gcc_ntox86_cpp-ne
4.6.3,gcc_ntox86_cpp
4.8.3,gcc_ntoarmv7le_gpp
4.8.3,gcc_ntox86_gpp
4.8.3,gcc_ntoarmv7le_cpp-ne
4.8.3,gcc_ntoarmv7le_cpp
4.8.3,gcc_ntox86
4.8.3,gcc_ntoarmv7le
4.8.3,gcc_ntox86_cpp-ne
4.8.3,gcc_ntox86_cpp
user:~$
可能是什么毛病我ALPeerData
类?
我不明白。如果你的主类不是从其他派生的,为什么你声明析构函数是虚拟的。 –
我添加了'虚拟'关键字来帮助未来从ALPeerData派生的另一位开发人员。使其虚拟化避免了基础析构函数没有被调用的常见错误。根据官方C++规范,这是完全良性的。请参阅http://stackoverflow.com/questions/300986/when-should-you-not-use-virtual-destructors关于使所有析构函数变为虚拟的讨论。 另一个理论场景:假设派生类_had_是从ALPeerData派生的,但后来在重构期间从代码中移除,而没有从ALPeerData中删除虚拟关键字。 –
Ahhhhhhhhh .......我明白了。 Muchas gracias,阿米戈。 –