C:如何管理大型结构?

时间:2013-05-21 14:34:43

标签: c heap structure

在C:

我正在尝试使用包含大型数组的结构,并且在声明它时会出现堆栈溢出错误。我猜(正确吗?)我在堆栈中没有足够的内存,因此,我应该使用堆(我不想改变我的堆栈内存大小,因为代码将由其他人使用)。有人能告诉我一个简单的方法吗?或者我应该使用除结构之外的东西吗?

我的代码 - definitions.h:

#define a_large_number 100000

struct std_calibrations{
    double E[a_large_number];
};

我的代码 - main.c:

int main(int argc, char *argv[])
{
    /* ...
    */

    // Stack overflows here:
    struct std_calibrations calibration;

    /* ...
    */

    return (0);
} 

感谢您的帮助!

2 个答案:

答案 0 :(得分:7)

有两种选择:

  1. 使用malloc(3)free(3)在运行时动态分配您的结构。当你说“应该使用堆”时,你正在谈论这个选项。

    struct std_calibrations *calibration = malloc(sizeof *calibration);
    

    以后,

    free(calibration);
    
  2. 给出结构静态存储持续时间。添加static关键字或将其设为全局关键字。这个选项可能会改变一些关于你如何使用结构的语义,但是根据你的示例代码,它应该没问题。

答案 1 :(得分:4)

将会员E更改为double*malloc()内存:

struct std_calibrations calibration;
calibration->E = malloc(sizeof(*calibration->E) * a_large_number);

并在不再需要时记住free(calibration->E);。如果需要,可以扩展struct std_calibrations以包含E中的元素数量,以便struct std_calibrations的用户可以决定他们需要多少元素。