STD::向量不能自动释放C++内存
以下是一些我遇到困难的代码:STD::向量不能自动释放C++内存,c++,memory,vector,memory-leaks,heap-memory,C++,Memory,Vector,Memory Leaks,Heap Memory,以下是一些我遇到困难的代码: unsigned __stdcall Thread_GetInstallType(void *pComputerName) { std::vector<WCHAR> sInstallationType(10240); INT iVal = Calculate(sInstallationType.data()); return iVal; } 您没有显示计算代码,也没有显示函数的调用方式。Calculate或您的调用代码完全可能包含未定义的行为,在这一点
unsigned __stdcall Thread_GetInstallType(void *pComputerName)
{
std::vector<WCHAR> sInstallationType(10240);
INT iVal = Calculate(sInstallationType.data());
return iVal;
}
您没有显示计算代码,也没有显示函数的调用方式。Calculate或您的调用代码完全可能包含未定义的行为,在这一点上,所有赌注都是无效的,这可能通过一些疯狂的间接影响,导致内存从Thread_GetInstallType泄漏
但这是相当牵强的。如图所示,该代码不会泄漏内存。自动运行的析构函数将释放它。将std::vector作为TCHAR*传递?这是怎么回事?你真的需要像@MaxLanghof那样提供一个mcve。你的代码没有显示数据是在向量上调用的。帮你自己一个忙,创建一个,并将其编辑到你的问题中。在那之前,我们帮不了多少忙。请创建一个。您当前的代码很粗略,Thread_GetInstallType返回时指针sinInstallationType.data将无效,但任何答案都必须猜测并假设Calculate的作用。因此,就目前情况而言,你的问题无法得到回答。它不会泄露内存,你错了。我猜你在内存管理器中增加了内存使用错误,这是因为内存泄漏泄露了C++代码中的内存,特别是小的分配不需要把内存释放给OS。您的操作系统可能需要一次返回几KB的块。如果整个数据块不是空的,你的CRT就不能把它还给你。此外,归还是一项昂贵的操作,因此它可能不会尝试在每次删除时释放回操作系统。
unsigned __stdcall Thread_GetInstallType(void *pComputerName)
{
std::vector<WCHAR> sInstallationType(10240);
INT iVal = Calculate(sInstallationType.data());
sInstallationType.clear();
sInstallationType.shrink_to_fit();
return iVal;
}