由于在处理一个大文件时,需要使用到一个很大的数组。然而,运行是显示报错。
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。超过限度,就会溢出。(原因是栈的地址是从高向低的,所以有限度。)
解决办法就是把数据保存在堆上。代码如下:
#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 堆与栈的区别(//m.ajphoenix.com/linux/23596.html)。
此外,我检测了下我电脑上栈的最大值为:8M。
本文永久更新地址://m.ajphoenix.com/linux/23597.html