大数组给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和/或calloc (和free )的头部。

链接地址: http://www.djcxy.com/p/14111.html

上一篇: Big array gives segmentation error in C

下一篇: Assembly Call Stack