Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
STD::向量不能自动释放C++内存_C++_Memory_Vector_Memory Leaks_Heap Memory - Fatal编程技术网

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;
}