在我的應用我創建一個對象非常類似這樣的:與對象處理損壞堆
connect() {
mVHTGlove = new vhtGlove(params);
}
,一旦我即將關閉應用程序,我稱它是:
disconnect() {
if (mVHTGlove)
delete mVHTGlove;
}
此調用總是觸發一個帶有以下消息的斷點:
Windows觸發了一個斷點 Des ignerDynD.exe。
這可能是由於 堆,這表明在 DesignerDynD.exe或任何它 已加載的DLL的一個錯誤的損壞。
這也可能是由於用戶 按F12而DesignerDynD.exe 有焦點。
輸出窗口可能有更多 診斷信息。
我無法修改vhtGlove類來修復堆棧損壞,因爲它是僅以頭文件,lib文件和dll的形式提供的外部庫。
有什麼方法可以用乾淨的方式使用這個類嗎?
****編輯:::我試圖剝離下來到最低限度,但我得到相同的結果......在這裏你有整個代碼。
#include "vhandtk/vhtCyberGlove.h"
#include "vhandtk/vhtIOConn.h"
#include "vhandtk/vhtBaseException.h"
using namespace std;
int main(int argc, char* argv[])
{
vhtCyberGlove* testGlove = NULL;
vhtIOConn gloveAddress("cyberglove", "localhost", "12345", "com1", "115200");
try
{
testGlove = new vhtCyberGlove(&gloveAddress,false);
if (testGlove->connect())
cout << "Glove connected successfully" << endl;
else
{
throw vhtBaseException("testGlove()->connect() returned false.");
}
if (testGlove->disconnect())
{
cout << "Glove disconnected successfully" << endl;
}
else
{
throw vhtBaseException("testGlove()->disconnect() returned false.");
}
}
catch (vhtBaseException *e)
{
cout << "Error with gloves: " << e << endl;
system("pause");
exit(0);
}
delete testGlove;
return 0;
}
刪除手套仍然崩潰。
編輯#2 ::如果我只是分配和刪除vhtCyberGlove的一個實例,它也崩潰。
int main(int argc, char* argv[])
{
vhtCyberGlove* testGlove = NULL;
vhtIOConn gloveAddress("cyberglove", "localhost", "12345", "com1", "115200");
testGlove = new vhtCyberGlove(&gloveAddress,false);
delete testGlove; //<<crash!
return 0;
}
任何想法?
謝謝!
JC
請注意,您不需要檢查_mVHTGlove_不是_NULL_。它很好地定義了將_NULL_指針傳遞給_delete_。 – sbi 2009-07-22 16:15:14
disconnect()調用了多少次? – MSN 2009-07-22 16:44:53
只是一次。 。 – levesque 2009-07-22 16:56:45