这个调试断言失败是什么意思?
表达式:header->_block_use == block_use || 标头->_block_use == _CRT_BLOCK && block_use == _NORMAL_BLOCK
这是什么意思?它与标题有关吗?
我在我的代码中发现,在我跳过它之后返回调试断言失败,只有这一行代码在其他项目中有效。
是否有我必须删除的链接器设置或 c/c++ 设置?
回答
您所命中的断言是 Microsoft Visual C/C++ 运行时库的一部分,特别与调试堆相关。调用malloc/free和使用new/delete运算符会导致调用 CRT 堆函数,这些函数使用这些断言执行内部一致性检查。
断言很可能是由于内存安全错误(例如尝试删除垃圾指针、双重释放等)而被命中。如果您找不到它,ASAN 工具可以通过密切跟踪来提供帮助内存操作并在您的代码执行无效操作时引发错误。如果没有这些仔细检查,代码中的错误可能会破坏数据结构,并且崩溃可能会在不相关的代码中发生很久很久以后。
对于 Visual Studio,它涉及几个步骤:必须使用 Visual Studio 安装程序安装“C++ AddressSanitizer”功能,并且必须在 C/C++ -> General 下的项目属性中启用地址清理器。