我正在研究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,阿米戈。 –