提问人:tairqammar 提问时间:4/8/2022 最后编辑:tairqammar 更新时间:4/8/2022 访问量:168
在 std 库中抛出错误的 alloc 时禁用中止调用
Disable abort call when throwing bad alloc in std library
问:
我正在尝试编写一个自定义分配器,以便为仅在发生 OOM 时执行的分支获得更好的代码覆盖率。我设法编写了分配器,但是当在 std 的类中的调试中抛出bad_alloc时,会进行内部调用以中止。此行为仅在调试时出现,在发布时我可以运行测试。
有没有办法在调试配置上禁用此行为?
更新 #1
这是发生上述问题的代码片段。我还忘了提到我使用 MSVC。
#include <iostream>
#include <string>
bool throw_bad_alloc = false;
void* operator new(size_t size)
{
if (throw_bad_alloc)
throw std::bad_alloc();
return ::malloc(size);
}
void operator delete(void* ptr)
{
::free(ptr);
}
int main()
{
try {
throw_bad_alloc = true;
std::string name;
name = "test_string";
}
catch (...)
{
std::cout << "thrown";
return 0;
}
std::cout << "not thrown";
return 0;
}
答: 暂无答案
评论
std::abort
通常作为std::terminate
的一部分调用。在未处理异常时调用。如何处理异常,更具体地说是异常?std::terminate
std::bad_alloc
std::bad_alloc