在我的C ++程序中,我需要处理大量信息。我将这些大信息存储在一个结构中。结构是......
struct xlsmain
{
struct sub_parts_of_interface sub_parts[200];
string name;
int no_of_subparts;
};
struct sub_parts_of_interface
{
struct pio_subparts pio[10];
string name_of_interface;
string direction;
string partition;
int no_of_ports;
};
struct pio_subparts
{
struct corners corner[32];
string pio_name;
};
struct corners
{
struct file_structure merging_files[50];
string corner_name;
int merginf_files_num;
};
struct file_structure
{
string file_name;
string file_type;
struct reportspecs report[20];
};
我正在使用new运算符为其分配内存
struct xlsmain *interface = new xlsmain[60];
在运行程序时显示std::bad_alloc error
。请帮助!
答案 0 :(得分:12)
您正在尝试分配60 xlsmain
,其中包含12,000 sub_parts_of_interface
,其中包含120,000 pio_subparts
,其中包含3,840,000 corners
,其中包含192,000,000 file_structure
,其中包含3,840,000,000 reportspecs
reportspecs
{1}},您尚未显示std::vector
的定义。所以你试图分配38亿的东西并且内存不足。
这是因为您运行的系统没有足够的内存来容纳您尝试分配的对象。
如果这些结构包含数组,因为结构可能包含这些对象,但它们通常不包含最大值,那么去除数组并替换它们std::vector
(在C ++中)或指针(在C或C ++中) )。无论使用哪种方法,您都只需要空间用于所需的实际对象以及一些会计开销,而不是在理论上可以使用空间。 std::vector
允许您根据需要添加元素,{{1}}应用程序将负责分配所需的内存。使用指针,您必须自己分配和释放空间。
答案 1 :(得分:1)
这很简单。你没有足够的记忆力。要么购买更多内存,要么重新设计代码。我建议用零长度向量替换你的数组。这样你只需要将矢量增长到你实际需要的大小,而不是总是固定大小。这将使用更少的内存并且也更灵活。例如
struct pio_subparts
{
vector<corners> corner;
string pio_name;
};
如果不确切知道自己要做什么,就无法提出更准确的建议。
答案 2 :(得分:0)
@ H2CO3是对的。
在纯C中使用类似这样的东西: http://www.elook.org/programming/c/malloc.html