5

在 C 中:

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

我的代码 - 定义.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);
} 

谢谢您的帮助!

4

2 回答 2

7

几个选项:

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

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

    然后,

    free(calibration);
    
  2. 给结构静态存储持续时间。添加static关键字或使其成为全局关键字。此选项可能会更改有关您如何使用该结构的一些语义,但鉴于您的示例代码,它应该没问题。

于 2013-05-21T14:37:17.933 回答
4

将成员更改E为 adouble*并对其进行malloc()记忆:

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

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

于 2013-05-21T14:38:38.457 回答