gpt4 book ai didi

c++ - 捕获内存分配异常

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:20:36 25 4
gpt4 key购买 nike

void newHandler() {
cdebug << "memory allocation failure" << std::endl;
throw std::bad_alloc();
}

int main() {
std::set_new_handler(newHandler);
// ...
}

Once newHandler is established as our error handler, it will be called when any heap allocation fails. The interesting thing about the error handler is that it will be called continiously until the memory allocation succeeds, or the function throws an error.

我对以上文字的问题是 authore 是什么意思,“直到内存分配成功,或者函数抛出错误。”在这种情况下,函数怎么会抛出错误?请求示例以理解。

感谢您的宝贵时间和帮助。

最佳答案

基本上,您的处理程序可能有 3 种行为

  • 它抛出一个 bad_alloc(或其派生类)。
  • 调用exit或abord函数停止程序执行
  • 它返回,在这种情况下会发生新的分配尝试

引用:http://www.cplusplus.com/reference/new/set_new_handler/

如果您不想处理每个新调用的分配错误,这将很有帮助。根据您的系统(使用大量内存),您可以释放一些分配的内存(缓存),以便下次尝试内存分配可以成功。

void no_memory ()
{
if(cached_data.exist())
{
std::cout << "Free cache memory so the allocation can succeed!\n";
cached_data.remove();
}
else
{
std::cout << "Failed to allocate memory!\n";
std::exit (1); // Or throw an expection...
}
}

std::set_new_handler(no_memory);

关于c++ - 捕获内存分配异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17963229/

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