gpt4 book ai didi

c++ - 有哪些好的做法可以帮助防止 unordered_maps 和 vector 中的 std::bad_alloc?

转载 作者:行者123 更新时间:2023-11-28 05:18:41 24 4
gpt4 key购买 nike

所以我正在制作一个程序,它可以读取 10,000 行代码。我有一个 unordered_map vector ,每一行都向该 unordered_map 添加数据(以新键的形式或向其中一个 vector 添加额外数据)。

对于每一行,我都使用 emplace 存储数据。例如,我将有一个

vector <int> temp;

我在使用中存储数据

temp.push_back(someInt);

然后将该 vector 存储在我的 unordered_map 中

uList.emplace(someKey, temp);
temp.clear();

或者我使用

将数据添加到 map vector 之一
uList[i].push_back(someInt);

这种情况每行发生多次,然后我转到下一行并重新做 10,000 次。

我得到的错误是

"terminate called after throwing an instance of 'std::bad_alloc'"

我假设这是因为使用我的 unordered_map 或我拥有的 vector 分配内存时出现问题。

我的问题是:如果我使用 .emplace() 次数过多,unordered_map 会不会在分配内存时出现问题,是否有任何常见做法可用于防止 vector 或无序映射的错误分配?

任何建议都会受到赞赏,即使是骂我说一些愚蠢的话也会有所帮助!

最佳答案

我认为这里没有足够的信息来说明为什么你会得到 bad_alloc。通常它只是意味着你的内存不足。

我的第一个想法是您有一个逻辑问题,您分配的比您想象的要多得多。我还想知道为无序映射生成的散列是否很差,导致您插入更多元素而不是更新现有元素的列表。

我的建议:发布一个更完整的示例,或添加一些调试/跟踪以查看在您的数据结构中创建和存储了多少项。

此外,您的进程在终止前消耗了多少内存?在具有虚拟内存的操作系统上运行的现代(尤其是 64 位)进程可以在失败之前分配大量内存。更有可能达到 32 位的限制,但仍然相当可观。

关于c++ - 有哪些好的做法可以帮助防止 unordered_maps 和 vector 中的 std::bad_alloc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41994074/

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