我有这样的结构:
struct Heap {
int size;
int *heap_array;
};
我需要创建一个数组:
Heap *rooms = new Heap[k];
k甚至可能等于1000000.对于k大约1000它起作用,k得到10000我得到了:
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
Aborted
编辑: 我忘了添加,我不能使用矢量,这是我学校的任务...只有< cstdio>和< math>允许的。
答案 0 :(得分:4)
您使用的是32位还是64位?
根据此情况,您的进程只能消耗最大内存。我猜你是32位。也许你甚至没有那么多的记忆开始。
另请看这里:
答案 1 :(得分:3)
更新
您应该确保没有泄漏任何内容,并且堆分配的寿命不会超过所需的时间。尝试减少每Heap
的分配要求。同样,如果您要分配那么多Heaps
:heap_array
的存储空间在哪里?这些都是new[]
编辑的吗?
如果超过系统的可寻址内存量,则可能需要将程序作为64位可执行文件运行。
答案 2 :(得分:1)
bad_alloc
基本上意味着new
无法分配请求的空间。当你试图分配10 000时,你已经看到它了,这让我感到惊讶。除此之外你还用了多少内存?
您可能想要检查您的对齐设置是什么(如何执行此操作是特定于编译器的)使用向量不应该真正有助于避免bad_alloc
异常,尤其是如果您从开始知道数字需要的元素。
如果您尝试分配的内存超过了您的内存(Win 32位为2 Gb),您可能会在这里碰壁:如果是这种情况,请尝试查看此答案: C++ memory allocation: 'new' throws bad_alloc?
您还可能面临碎片问题,可能有足够的空间来计算空闲字节数,但单个群集中的空间不足。上面的链接为用户提供了一些建议 Crashworks ,他建议使用(虽然特定于操作系统)函数HeapAlloc
和VirtualAlloc
。但话又说明这会与你的学校任务发生冲突。
而是尝试调查您是否在另一台计算机上收到相同的问题。
也许如果真的有必要分配和处理足够的结构来导致bad_alloc
异常,你可以考虑一次只处理几个,最好重用已经分配的结构。这将改善您的内存使用数量,甚至可能会更快。