大数组给C中的分段错误
我对C非常陌生,所以如果这是一个绝对的初学者问题,我很抱歉,但是当我构建大型数组时,我遇到了分割错误,我正在做的是相关的部分:
unsigned long long ust_limit;
unsigned long long arr_size;
/* ust_limit gets value around here ... */
arr_size = ((ust_limit + 1) / 2) - 1;
unsigned long long numbs[(int)arr_size];
这适用于ust_limit的某些值,但是当它达到大约4.000.000以上时会出现分段错误。 我想要的是检测可能的段错误并优雅地失败。 我怎么知道哪些值会导致分段错误。 而且,这是平台依赖的吗?
你很可能会遇到堆栈溢出,因为你正在堆栈上创建一个非常大的数组。 为了避免这种情况,请动态分配内存:
unsigned long long *numbs = malloc(arr_size * sizeof(unsigned long long));
之后,当你完成数组时,再次释放它:
free(numbs);
您将数组商店堆栈框架(其大小有限制)改为使用malloc
。
unsigned long long *numbs = malloc(arr_size * sizeof(long long));
// don't forget to free after use
free(numbs)
你消耗的堆栈太多了。 限制取决于平台。
确切的限制取决于操作系统。 在某些操作系统上,这些限制可以在一定程度上进行更改。
对于大量的内存,你应该使用malloc
和/或calloc
(和free
)的头部。