在我的应用程序中,我正在创建一个非常像这样的对象:
connect() {
mVHTGlove = new vhtGlove(params);
}
一旦我即将关闭应用程序,我称之为:
disconnect() {
if (mVHTGlove)
delete mVHTGlove;
}
此调用始终触发带有以下消息的断点:
Windows 已在 DesignerDynD.exe 中触发断点。
这可能是由于堆损坏,这表明 DesignerDynD.exe 或其已加载的任何 DLL 中存在错误。
这也可能是由于在 DesignerDynD.exe 具有焦点时用户按 F12。
输出窗口可能有更多诊断信息。
我无法修改 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