如何分配长数组的struct?

时间:2011-10-22 22:20:25

标签: c++

我有这样的结构:

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>允许的。

3 个答案:

答案 0 :(得分:4)

您使用的是32位还是64位?

根据此情况,您的进程只能消耗最大内存。我猜你是32位。也许你甚至没有那么多的记忆开始。

另请看这里:

http://www.cplusplus.com/reference/std/new/bad_alloc/

答案 1 :(得分:3)

更新

您应该确保没有泄漏任何内容,并且堆分配的寿命不会超过所需的时间。尝试减少每Heap的分配要求。同样,如果您要分配那么多Heapsheap_array的存储空间在哪里?这些都是new[]编辑的吗?

如果超过系统的可寻址内存量,则可能需要将程序作为64位可执行文件运行。

答案 2 :(得分:1)

bad_alloc基本上意味着new无法分配请求的空间。当你试图分配10 000时,你已经看到它了,这让我感到惊讶。除此之外你还用了多少内存?

您可能想要检查您的对齐设置是什么(如何执行此操作是特定于编译器的)使用向量不应该真正有助于避免bad_alloc异常,尤其是如果您从开始知道数字需要的元素。

如果您尝试分配的内存超过了您的内存(Win 32位为2 Gb),您可能会在这里碰壁:如果是这种情况,请尝试查看此答案: C++ memory allocation: 'new' throws bad_alloc?

您还可能面临碎片问题,可能有足够的空间来计算空闲字节数,但单个群集中的空间不足。上面的链接为用户提供了一些建议 Crashworks ,他建议使用(虽然特定于操作系统)函数HeapAllocVirtualAlloc。但话又说明这会与你的学校任务发生冲突。

而是尝试调查您是否在另一台计算机上收到相同的问题。

也许如果真的有必要分配和处理足够的结构来导致bad_alloc异常,你可以考虑一次只处理几个,最好重用已经分配的结构。这将改善您的内存使用数量,甚至可能会更快。