gpt4 book ai didi

c++ - _CrtSetBreakAlloc 使用内存内容而不是分配号

转载 作者:太空宇宙 更新时间:2023-11-04 12:40:43 24 4
gpt4 key购买 nike

我正在使用 _CrtSetBreakAlloc()函数来跟踪我的 MFC 项目的 debugger 构建中的内存泄漏。 (Here's the code 来 self 之前的问题。)

只要 Allocation order number 保持不变,该技术就有效。但在许多情况下并非如此。例如,这是我现在收到的两份报告:

第一次运行:

Detected memory leaks!
Dumping objects ->
{222861} normal block at 0x000002BDF58347C0, 240 bytes long.
Data: <C : \ P r o g r > 43 00 3A 00 5C 00 50 00 72 00 6F 00 67 00 72 00
{222860} normal block at 0x000002BDEFBA52A0, 16 bytes long.
Data: < > 10 AF B7 EF BD 02 00 00 00 00 00 00 00 00 00 00
{222859} normal block at 0x000002BDEFB7AF10, 40 bytes long.
Data: < R G > A0 52 BA EF BD 02 00 00 C0 47 83 F5 BD 02 00 00
Object dump complete.

第二次运行:

Detected memory leaks!
Dumping objects ->
{222422} normal block at 0x00000123DDB67540, 224 bytes long.
Data: <C : \ P r o g r > 43 00 3A 00 5C 00 50 00 72 00 6F 00 67 00 72 00
{222419} normal block at 0x00000123DDBA9C50, 16 bytes long.
Data: < # > 80 16 B7 DD 23 01 00 00 00 00 00 00 00 00 00 00
{222418} normal block at 0x00000123DDB71680, 40 bytes long.
Data: <P # @u # > 50 9C BA DD 23 01 00 00 40 75 B6 DD 23 01 00 00
Object dump complete.

所以我想知道,是否有一个函数或一种方法可以重写 _CrtSetBreakAlloc 以使其在内存内容上触发断点?例如,在我的例子中,当内存中写入 Unicode-16 字符串 "C:\Progr" 时。

最佳答案

已经有一个_CrtSetAllocHook。但这应该如何帮助呢?数据在分配后设置。所以当你要触发的数据写入分配的内存时,不会发生钩子(Hook)。

我看到的唯一方法是使用 _CrtDoForAllClientObjects 并搜索所有分配的 block 。

关于c++ - _CrtSetBreakAlloc 使用内存内容而不是分配号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54317518/

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