gpt4 book ai didi

c - 调试内存损坏

转载 作者:太空狗 更新时间:2023-10-29 17:21:38 27 4
gpt4 key购买 nike

早些时候我遇到了 C (visual studio) 中动态内存的问题。我有一个或多或少的工作程序,在释放其中一个缓冲区时抛出运行时错误。这是一个明显的内存损坏,程序写入了缓冲区的末尾。

我的问题是,追踪起来非常耗时。错误在损坏后被抛出,我不得不手动调试整个运行以查找缓冲区末端何时被覆盖。

是否有任何工具\方法可以帮助追踪此问题?如果程序会立即崩溃,我会更快地发现问题...

问题示例:

int *pNum = malloc(10 * sizeof(int));

// ||
// \/
for(int i = 0; i < 13; i++)
{
pNum[i] = 3;
}

// error....
free(pNum);

最佳答案

我为此使用“数据断点”。在您的情况下,当程序崩溃时,它可能首先会这样提示:

Heap block at 00397848 modified at 0039789C past requested size of 4c

然后,再次启动您的程序,并在地址0039789C 处设置数据断点。当代码写入该地址时,执行将停止。我经常会在此时立即发现错误。

如果您的程序重复分配和释放内存,并且它恰好位于这个确切的地址,只需禁用释放:

_CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_DELAY_FREE_MEM_DF);

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

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