【发布时间】:2012-09-25 03:12:51
【问题描述】:
Valgrind 告诉我:
==19305== 16 bytes in 1 blocks are definitely lost in loss record 19 of 179
==19305== at 0x402842F: operator new(unsigned int)
==19305== by 0x805273E: Loader::createLevel(int, int, std::string, Player*, int, int, int)
==19305== by 0x80551B0: Loader::loadLevel()
==19305== by 0x80676C2: main (main.cpp:38)
我的函数Loader:.createLevel 有几个new 语句。我怎么知道是哪一个导致了泄漏(即线路)?
谢谢!
P.S.:我很乐意发布代码,但它太长了:/
【问题讨论】:
-
简单的长期解决方案是将使用
new生成的数组更改为向量,并将使用new分配的任何其他指针内存更改为智能指针。内存将被自动释放。 -
@chris,我没有创建任何数组
-
确保你有一个析构函数,在这个析构函数中,在堆上的构造函数中创建的所有实例都在最后被释放和释放。
-
那么只是智能指针,但请记住
std::vector以备将来使用。它在各个方面都优于newed 数组。 C++11 提供了std::unique_ptr和std::shared_ptr,它们会让你很顺利。您几乎不需要std::weak_ptr。对于 C++03,仍然有旧的auto_ptr在上述三个上下文中被弃用。
标签: c++ memory-leaks new-operator valgrind