当前位置: 首页 > 知识库问答 >
问题:

如果内存不足,则抛出bad_alloc

常俊爽
2023-03-14
/ *
* \ brief Dictionary builder from file
*
* \ pre There is enough memory
* \ pre The file is first opened
*
* \ post If the file is open, the class instance has been initialized from
* from the dictionary file. Otherwise, we generate an empty class.
*
* \ exception bad_alloc if there is not enough memory
* This method calls chargeDicSyn!
* /
DicSyn::DicSyn(std::ifstream &file):
root(0), nbRadicals(0), groupesSynonymes()
{
    chargeDicSyn(file);
}

如果内存不足,我必须抛出异常bad_alloc。我真的不是专家。用这个方法怎么做?

共有1个答案

广瑞
2023-03-14

如果您的代码正在使用运算符new(或任何使用运算符new的东西,如标准库)分配内存,那么如果内存不足,它应该已经抛出std::bad_alloc

编辑:如果它使用的是C风格的内存管理(malloc和friends),我不认为它是这样的,因为您是从std::ifstream而不是像C中那样从文件*构造对象的,那么您应该检查malloc是否返回了nullptr(即分配给malloc的调用的指针为null),如果是,则抛出std::bad_alloc。如果由于某种原因您不能这样做,您可以#包含 并检查errno==enomem,尽管这并不完全是万无一失的,因为malloc不能保证在失败时设置errno

 类似资料:
  • 我正在努力解决古老的字谜问题。多亏了许多教程,我能够迭代一组字符串,递归地找到所有的排列,然后将它们与英语单词列表进行比较。我发现的问题是,在大约三个单词之后(通常是关于“变形”之类的东西),我会得到一个OutOfMemory错误。我试着把我的批分成小的集合,因为它似乎是消耗我所有内存的递归部分。但即使只是“变形”也把它锁起来了... 编辑:根据出色的反馈,我已经将生成器从排列更改为工作查找: 它

  • 问题内容: 我今天遇到一个奇怪的问题。对于其他人来说,这可能是一个简单的答案,但这让我感到困惑。为什么下面的代码会导致内存错误? 我得到了这两个错误之一…第一个是在节点的解释器中运行此代码时,第二个是通过nodeunit运行它时: 严重错误:CALL_AND_RETRY_2分配失败-内存不足 严重错误:JS分配失败-内存不足 问题答案: 当我尝试访问阵列时会发生这种情况。但是获取长度却没有。

  • 问题内容: 我一直在阅读有关Linux内存不足的情况,手册页中的以下段落让我开始思考: 默认情况下,Linux遵循乐观的内存分配策略。这意味着当malloc()返回非NULL时,不能保证内存确实可用。这是一个非常糟糕的错误。万一发现系统内存不足,一个臭名昭著的OOM杀手将杀死一个或多个进程。[…] 考虑到操作员的new实现最终会在某个时刻调用malloc,是否可以保证new实际上会在Linux上抛

  • 最近我被要求在我的代码中捕获可抛出的内容。所以我们遇到了一个争论,我们是否应该这样做,我给出了一个OutOfMemoryError的例子,在这种情况下,即使我们捕获到错误,我们的代码也不会被进一步处理。 所以为了测试这个理论,我们为它创建了示例代码。 在Wed Jun 16 14:20:41 IST 2021时间运行测试 try Block内部 catch Block内部 Java.lang.Ou

  • 问题内容: 今天,我运行了用于文件系统索引编制的脚本,以刷新RAID文件索引,并在4小时后崩溃并出现以下错误: 服务器配备16GB RAM和24GB SSD交换。我非常怀疑我的脚本是否超过了36gb的内存。至少不应该 脚本使用文件元数据(修改日期,权限等,无大数据)创建存储为对象数组的文件索引 过去,我曾经用此脚本经历过奇怪的节点问题,这使我不得不这样做。在处理诸如String之类的大文件时,由于

  • 我正在PyTorch中运行一个评估脚本。我有许多经过训练的模型(*.pt文件),我将其加载并移动到GPU,总共占用270MB的GPU内存。我使用的批量大小为1。对于每个示例,我加载一个图像并将其移动到GPU。然后,根据样本,我需要运行一系列经过训练的模型。有些模型以张量作为输入和输出。其他模型的输入是张量,输出是字符串。序列中的最终模型总是有一个字符串作为输出。中间张量临时存储在字典中。当模型使用