4

在我的 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显示。请帮忙!

4

3 回答 3

12

您正在尝试分配 60xlsmain其中包含 12,000sub_parts_of_interface包含 120,000pio_subparts包含 3,840,000corners包含 192,000,000file_structure包含 3,840,000,000 reportspecs,并且您没有显示 的​​定义reportspecs。所以你试图分配 38 亿个东西并且内存不足。

那是因为您正在运行的系统没有足够的内存来保存您尝试分配的对象。

如果这些结构包含数组,因为这些结构可能包含这些对象,但它们通常不包含最大值,那么摆脱数组并替换它们std::vector(在 C++ 中)或指针(在 C 或 C++ 中)。无论使用哪种方法,您都将只为所需的实际对象使用空间以及一些记帐开销,而不是使用理论上可能的最大空间。std::vector允许您根据需要添加元素,std::vector应用程序将负责分配所需的内存。使用指针,您必须自己分配和释放空间。

于 2012-10-17T11:10:29.203 回答
1

这很简单。你没有足够的内存。要么购买更多内存,要么重新设计代码。我建议你用零长度向量替换你的数组。这样,您只需将向量增加到您实际需要的大小,而不是始终具有固定大小。这将使用更少的内存并且更加灵活。例如

  struct pio_subparts
   {
    vector<corners> corner; 
    string pio_name;     
   };

如果不确切知道您要做什么,就不可能获得更精确的建议。

于 2012-10-17T11:08:36.623 回答
0

@H2CO3 是对的。

在纯 C 中使用这样的东西: http ://www.elook.org/programming/c/malloc.html

于 2012-10-17T11:10:36.777 回答