【发布时间】:2013-11-15 15:27:20
【问题描述】:
//CVMI.cpp
static char* std1[] = {"a","b","c"};
static char* std2[] = {"1","2","3"};
CVMI::CVMI(HWND p)
{
//Does nothing.
}
//CVMI.h
const int cMaxIPAddr = 100;
class CVMI : public VMIListener
{
public:
CVMI(HWND p);
VMI vmi;
bool bOpen;
char sVoceraIPAddr[cMaxIPAddr + 1];
long iMessageID;
};
以上是我在线程中使用并运行 for 循环的类的代码。如果将以下三行放在那个 for 循环中,那么我注意到我的记忆会飞速发展。
m_pVMI = new CVMI(m_hNotifyWnd);
delete m_pVMI;
m_pVMI = NULL;
我在这里做错了什么?我虽然我的删除每次都会处理内存分配。还是我必须专门释放析构函数〜CVMI()中的所有资源? .这是我第一次尝试解决内存泄漏问题,作为一个 C++ 初学者并没有让它变得更容易。
编辑:
class VMI_API VMIListener : public Listener
{
public:
// Message acknowledgement. iAckCode is one of AC codes.
virtual void HandleAck(long iMessageID, char* sLoginID, int iAckCode) = 0;
virtual void HandleResponse(long iMessageID, char* sLoginID, char* sResponse) = 0;
virtual void HandleConnectionFailed(void) = 0;
};
【问题讨论】:
-
VMIListener有虚拟析构函数吗? -
看不到,我只是粘贴在VMI监听器的基本部分。
-
@Fylix
VMIListener和Listener都需要 virtual destructors -
您没有显示回答此问题所需的代码。什么是
m_pVMI,它是如何声明的? -
顺便说一句,您是如何检测到内存泄漏的?您使用的是哪个 IDE?如果您使用的是 Visual Studio,则在调试模式下运行它,当程序退出时,调试窗口中是否有消息,例如“检测到内存泄漏!转储对象 ->.......”?
标签: c++ memory-leaks