gpt4 book ai didi

C++内存泄漏检测方法

转载 作者:可可西里 更新时间:2023-11-01 11:40:10 24 4
gpt4 key购买 nike

我正在开发一个在 Windows 上使用许多外部库的项目。我遇到了内存泄漏问题:我通过重写 operator new/new[] 和 delete/delete[] 检测到了很多内存泄漏。问题是我知道有多少内存块泄漏了,但不知道在哪里可以找到它们,在重写的函数中,我可以记录分配的内存块的大小和位置,而没有堆栈跟踪。

所以为了处理它,我想我也需要记录堆栈跟踪(但是怎么做?),或者有什么方法可以找到导致内存泄漏的代码?

非常感谢您的帮助。

最佳答案

我使用以下方法为 new 提供有关分配每个内存块的文件和行的信息:

void operator delete(void *p, const char* filename, int line);
void operator delete(void *p, const char* filename, int line, const std::nothrow_t&);
void operator delete[](void *p, const char* filename, int line);
void operator delete[](void *p, const char* filename, int line, const std::nothrow_t&);

void *operator new(std::size_t n, const char* filename, int line);
void *operator new(std::size_t n, const std::nothrow_t&, const char* filename, int line);
void *operator new[](std::size_t n, const char* filename, int line);
void *operator new[](std::size_t n, const std::nothrow_t&, const char* filename, int line);

#define new foo_new
#define foo_new new(__FILE__, __LINE__)

关于C++内存泄漏检测方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2666447/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com