C++ 我得到一个内存泄漏使用向量

C++ 我得到一个内存泄漏使用向量,c++,visual-studio-2010,vector,memory-leaks,C++,Visual Studio 2010,Vector,Memory Leaks,我已经编写了一些简单的接口,我想创建一个全局向量,其中包含实现该接口的类的对象。 因此,我做了以下工作: vector<SomeInterface*> ary; vectoraly; 除了:void main()和vector ary,我注释掉了整个代码; 现在使用_CrtDumpMemoryLeaks();在VisualStudio2010中,我得到了1个区块 如何修复它 注意。您需要删除分配的内存。 您有两个选择: for (auto *p : ary) delete p;

我已经编写了一些简单的接口,我想创建一个全局向量,其中包含实现该接口的类的对象。 因此,我做了以下工作:

vector<SomeInterface*> ary;
vectoraly;
除了:void main()和vector ary,我注释掉了整个代码; 现在使用_CrtDumpMemoryLeaks();在VisualStudio2010中,我得到了1个区块

如何修复它


注意。

您需要删除分配的内存。 您有两个选择:

for (auto *p : ary) delete p;

vectoraly;

第二个更安全,因为当您销毁向量时,它会自动释放内存。

您需要删除分配的内存。 您有两个选择:

for (auto *p : ary) delete p;

vectoraly;

第二个更安全,因为当你销毁向量时,它会自动释放内存。

向量
不是你泄漏的原因,我可以保证这一点。您正在向量中存储
SomeInterface*
s。我假设您分配这些(
newsomeinterface(…)
)并且不在任何地方删除它们。我建议您使用智能指针:

std::vector<std::unique_ptr<SomeInterface>> ary;

vector
不是你泄密的原因,我可以保证这一点。您正在向量中存储
SomeInterface*
s。我假设您分配这些(
newsomeinterface(…)
)并且不在任何地方删除它们。我建议您使用智能指针:

std::vector<std::unique_ptr<SomeInterface>> ary;

你把内存泄漏放在哪里了?当你调用向量时,它是否已被破坏?全局对象位于
main
的末尾之外,一些泄漏检测器在
main
的末尾检查是否存在泄漏?我在返回0之前将其转储;。向量什么都不存在,那怎么去破坏它呢?(我尝试删除ary-不起作用)这可能需要更多关于相关代码的细节。当使用指针指向接口时要考虑的一件事是接口应该有一个虚拟析构函数。如果没有,则可能会发生内存泄漏。如果从未向向量添加任何内容,则通常不需要分配任何存储。然而,在调试构建中的VS上,我相信有一个迭代器sentinel对象被分配。使用此选项可以在销毁集合后对迭代器执行调试检查。如果尚未调用vectors析构函数,这将在泄漏检查器中显示为泄漏。它是无害的。更改测试以确保在全局文件被销毁之前不会转储泄漏会有所帮助。您在哪里转储了内存泄漏?当你调用向量时,它是否已被破坏?全局对象位于
main
的末尾之外,一些泄漏检测器在
main
的末尾检查是否存在泄漏?我在返回0之前将其转储;。向量什么都不存在,那怎么去破坏它呢?(我尝试删除ary-不起作用)这可能需要更多关于相关代码的细节。当使用指针指向接口时要考虑的一件事是接口应该有一个虚拟析构函数。如果没有,则可能会发生内存泄漏。如果从未向向量添加任何内容,则通常不需要分配任何存储。然而,在调试构建中的VS上,我相信有一个迭代器sentinel对象被分配。使用此选项可以在销毁集合后对迭代器执行调试检查。如果尚未调用vectors析构函数,这将在泄漏检查器中显示为泄漏。它是无害的。更改您的测试以确保在globals被销毁之前不会倾倒泄漏,这将有所帮助。