在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);
}
感谢您的帮助!
答案 0 :(得分:7)
有两种选择:
答案 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
的用户可以决定他们需要多少元素。