gpt4 book ai didi

c++ - 内存调试策略

转载 作者:搜寻专家 更新时间:2023-10-31 02:17:56 25 4
gpt4 key购买 nike

我正在寻找 C++ 中的内存调试策略。我已经使用 QT 编写了一个应用程序。我正在使用 Windows 7。使用的编译器是 MinGW。在 Debug模式下,我有时会收到以下调试消息:检测到堆损坏:在 0x 处的正常 block (#...) 之后...

我猜,会发生以下情况:使用 delete 释放内存块。之后,使用内存。

大多数时候,这会毫无问题地工作。但有时,这会导致应用程序崩溃。我的问题是,如何调试这个错误?我正在考虑替换运算符 new/delete。

考虑以下新建/删除运算符:

struct MemHandle
{
void* ptr;
size_t size;
}

void * operator new(std::size_t n) throw(std::bad_alloc)
{
MemHandle Mem;
void* p = malloc(n);
Mem.ptr = p;
Mem.size = n;
//TODO: Store Mem
}
void operator delete(void * p) throw()
{
MemHandle Mem = GetMemHandle(p);
memset(p, 0, Mem.size);
free(p);
}

在这种情况下,当delete后重新使用内存时,程序会立即崩溃。这是一个好的策略,还是您有更好的选择?

最佳答案

您要实现的是对每个内存分配进行簿记。有可用的内存分析工具(商业的和开源的),它们做同样的事情。
Valgrind 是一个很棒的工具,但它在 Windows 上不可用。
Purify 是一款可在 Windows 上运行的商业工具,如果您正在寻找开源工具,Dr Memory 是您的不二之选。
您可以探索更多工具 here

关于c++ - 内存调试策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35105938/

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