内存泄漏检测器如何区分从应用程序调用的malloc和第三方malloc调用? < >我看到像ValGRIN这样的内存泄漏侦测器只检测在应用程序中调用的Maloc内存而不是第三方库,即跟踪直接新调用,而不是在C++中的STL容器中分配。很难使STL容器泄漏,

内存泄漏检测器如何区分从应用程序调用的malloc和第三方malloc调用? < >我看到像ValGRIN这样的内存泄漏侦测器只检测在应用程序中调用的Maloc内存而不是第三方库,即跟踪直接新调用,而不是在C++中的STL容器中分配。很难使STL容器泄漏,,c++,linux,memory-leaks,valgrind,C++,Linux,Memory Leaks,Valgrind,内存泄漏检测器如何区分从应用程序调用的malloc和第三方malloc调用? < >我看到像ValGRIN这样的内存泄漏侦测器只检测在应用程序中调用的Maloc内存而不是第三方库,即跟踪直接新调用,而不是在C++中的STL容器中分配。很难使STL容器泄漏,你如何确定valgrind没有跟踪它们?@Yksisarvinen如果一个人写new std::vector(这肯定永远不应该做),并且从不调用delete,valgrind只会提到new的泄漏,但对于发生在std::vector内部的分配,问

内存泄漏检测器如何区分从应用程序调用的malloc和第三方malloc调用?
< >我看到像ValGRIN这样的内存泄漏侦测器只检测在应用程序中调用的Maloc内存而不是第三方库,即跟踪直接新调用,而不是在C++中的STL容器中分配。

很难使STL容器泄漏,你如何确定valgrind没有跟踪它们?@Yksisarvinen如果一个人写
new std::vector
(这肯定永远不应该做),并且从不调用
delete
,valgrind只会提到
new
的泄漏,但对于发生在
std::vector
内部的分配,问题是为什么不报告此内部分配,因为这也是泄漏的内存。或者,如果
std::vector
是一个类的成员,该类的实例是使用
new
创建的,并且该实例没有被删除。@t.niese我在问,因为这似乎有点不太可能-STL容器只是标题,所以它们应该与用户的代码没有区别(除非valgrind出于某种原因明确检查内部实现)。我怀疑读取valgrind输出不正确,或者认为没有泄漏。valgrind可能忽略了其抑制文件中要求忽略的那些分配。有充分证据表明,valgrind没有专门处理第三方库。没有逻辑或方法来识别主应用程序及其库从“标准或第三方”库中删除。Valgrind检测对分配函数(malloc、calloc、new等)的调用,并跟踪所有检测到的调用的内存分配。使STL容器泄漏非常困难,如何确定Valgrind不跟踪这些调用?@Yksisarvinen如果写入
new std::vector
(这是绝对不应该做的),并且从不在其上调用
delete
,valgrind只会提到
new
的泄漏,而不会提到
std::vector
内部发生的分配,那么问题就是为什么不报告此内部分配,因为这也是泄漏的内存。或者如果
std::vector
是类,该类的实例是使用
new
创建的,而该实例没有被删除。@t.niese我在问,因为这似乎不太可能-STL容器只是标题,所以它们应该与用户代码没有区别(除非valgrind出于某种原因明确检查内部实现)。我怀疑读取valgrind输出不正确,或者认为没有泄漏。valgrind可能忽略了其抑制文件中要求忽略的那些分配。有充分证据表明,valgrind没有专门处理第三方库。没有逻辑或方法来识别主应用程序及其库Valgrind检测对分配函数(malloc、calloc、new等)的调用,并跟踪所有检测到的调用的内存分配。