【发布时间】:2016-09-27 22:21:38
【问题描述】:
我想通过重载 new/delete 来跟踪内存以检查泄漏和检查内存消耗(peek 等)。
但是,我注意到有时调用了一个 delete 而没有相应的 new (即使在使用 boost 的代码行数很少的简单程序上),看起来可以从另一种方式获取内存(malloc ?)并且删除后很高兴将其释放。这会给我带来一些问题,因为我需要通过分配来存储信息(大小)。
我已经重载了以下方法,是否缺少一个函数?或者这是我的 c++ 编译器/增强版本的错误?
void * operator new( size_t size );
void * operator new( size_t size, const std::nothrow_t& ) noexcept;
void * operator new[]( size_t size );
void * operator new[]( size_t size, const std::nothrow_t& ) noexcept;
void operator delete( void* ptr);
void operator delete[]( void* ptr);
void operator delete( void* ptr, const std::nothrow_t&) noexcept;
void operator delete[]( void* ptr, const std::nothrow_t&) noexcept;
我在 windows 和 mingw-w64 gcc 下运行,所以我更喜欢使用“代码”解决方案而不是特定工具解决方案(“valgrind 不可用),这也将使我几乎可以正常运行程序。
【问题讨论】: