我有一种情况,有时发现我的部分代码传递了未初始化的内存。我正在寻找一种在使用调试堆运行时发生这种情况时可以断言的方法。这是一个可以在某些地方抛出的功能,以在跟踪错误方面提供额外帮助:
void foo( char* data, int dataBytes )
{
assert( !hasUninitialisedData(data,dataBytes) ); //, This is what we would like
...
}
我已经看到有像 valgrind 这样的工具,当我在 Windows 上运行时,有 DrMemory。然而,这些在应用程序外部运行,因此当开发人员出现问题时不会发现问题。更重要的是,这些报告为 Qt 和其他不相关的功能提供了数千份报告,使事情变得不可能。
我认为这个想法是有一个函数可以在数组中搜索 0xBAADFOOD ,但是有一系列潜在的十六进制值,并且每个平台都会发生变化。当存储整数时,这些十六进制值有时也可能有效,因此不确定是否可以从调试堆中获得更多信息。
我主要感兴趣的是可能存在 CRT 函数、库、visual-studio 断点或其他辅助函数来进行此类检查。它“感觉”应该已经有一个地方了,我还找不到它,所以如果有人对这种情况有一些很好的解决方案,我将不胜感激。
编辑:我应该解释得更好,我知道调试堆会用一个值初始化所有分配,以尝试检测未初始化的数据。如前所述,接收到的数据包含一些 0xBAADFOOD 值,通常内存是用 0xCDCDCDCD 初始化的,但这是分配数据的第三方库,显然有多个幻数,因此我很感兴趣是否隐藏在某处的通用检查。