我想用一些静态函数和一个辅助动态分配数组封装一个排序类。我最近在想在哪里delete[]
动态数组。但是我发现没有任何内存泄漏错误,全局范围内的动态allocatd数组也没有。为什么?这里有什么规则?
#include <iostream>
struct Foo{
static int *j;
};
int* Foo::j = new int[10]; //no memory leak error
// int *q = new int[10]; //no memory leak error
int main(){
// int *q = new int[10]; //memory leak error
return 0;
}
我使用clang++ -fsanitize=address -g -Wall main.cpp; ASAN_OPTIONS=detect_leaks=1 ./a.out
检测内存泄漏。
答案 0 :(得分:3)
在静态/全局情况下,分配的int []不会丢失,因为它可以访问,为什么会出现内存泄漏?
答案 1 :(得分:1)
堆清洗器经常在静态对象初始化期间无法跟踪分配,这就是这里发生的情况。全局指针也不例外,动态分配的数组也会泄漏。
正确释放全局资源的唯一方法是管理它的对象的析构函数。换句话说,照常使用std::vector
。