由于在处理一个大文件时,需要使用到一个很大的数组。然而,运行是显示报错。<span style="font-size:14px;">#include <stdio.h> #include <memory.h> int main() { int length = 10000000; char block[length]; memset(block,0,sizeof(block)); return 0; } Segmentation fault (core dumped) 后来,在网上发现了原因, 原来是声明数组时保存在栈中,而栈的大小一般只有几M。超过限度,就会溢出。(原因是栈的地址是从高向低的,所以有限度。) 解决办法就是把数据保存在堆上。代码如下: </span><pre name="code" class="cpp">#include <stdio.h> #include <memory.h> #include <stdlib.h> int main() { int length = 10000000; char *block=NULL; block = (char *)malloc(length * sizeof(char)); memset(block,0,sizeof(block)); free(block); return 0; }
具体堆和栈的区别,可以参考: Linux C 堆与栈的区别 。
此外,我检测了下我电脑上栈的最大值为: 8M。
Linux c 数组大小的限制
最新推荐文章于 2024-07-23 11:50:17 发布