在这种情况下,静态数组会导致内存泄漏
could static array cause memory leak in this case?
//CVMI
.cppstatic 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;
};
您需要检查几个地方:
-
使用"CVMI"的调用方。
如您所描述的,没有内存泄漏,因为您有"删除"
m_pVMI = new CVMI(m_hNotifyWnd); delete m_pVMI; m_pVMI = NULL;
-
"CVMI"类
根据您的代码,您"新建"并立即"删除"并且您的构造函数什么都不做,那么这不是有内存泄漏的地方。
-
唯一可疑的地方是"VMIListener"的构造函数或基类"侦听器"(如果那个也有基类,也检查基类...),也许它会分配给内存变量,例如:m_foo = new CFoo(); 在构造函数中;但是,如果没有为"VMIListener"(或侦听器或超类)定义析构函数,则可以保证内存泄漏。
std1
和 std2
(静态数组)不会导致内存泄漏。上面的代码中甚至没有使用它们,所以不清楚你的标题来自哪里。至于OP注释中提到的虚拟析构函数,这完全取决于Listener
的实现是什么,因为VMIListener
和CVMI
都没有动态分配内存。
相关文章:
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 尽管遵循了规则,内存泄漏在哪里
- 为什么调用堆栈数组会导致内存泄漏
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 使用模板类的自定义列表类型中的内存泄漏
- 为什么以下C++代码中存在内存泄漏?
- OpenCV 我应该使用智能指针来防止内存泄漏吗?
- 我是否生成线程并导致内存泄漏?
- 多线程程序中出现意外的内存泄漏
- 为什么此函数会导致内存泄漏?
- 在 C++ 库中使用cythonized python时内存泄漏
- 需要帮助查找内存泄漏
- 瓦尔格林德的内存泄漏使用新的
- 无法找出我的代码中的内存泄漏
- C++ 结构内部的unordered_map会导致内存泄漏问题吗?
- 可视化 使用 VS Code 查找C++应用程序中的内存泄漏
- Shared_ptr双链接列表内存泄漏
- C++ 在类中使用常量引用文本时 O2 内存泄漏