要分配一个很大的一维数组
如 #define MAX 200000000
int arr[MAX];
编译器则会报错,说分配的数组太大了,无法分配
这是因为系统在处理数组的时候,分配的是一个连续的一块存储空间。
这时候,我们需要用动态分配来结局(C++中的new也是基于C语言的malloc,底层实现就是这个函数了),但必须得记得 最后要用 free() 函数对其进行释放哦!
函数原型 void *malloc(size_t size);
举个例子如下
int main(int argv,char * argc)
{
int i;
int *arr;
arr= (int * ) malloc(sizeof(int));
for(i=0;i<MAX;i++)
{
arr[i]= 1;
}
free(arr);
exit(0);
}
当然这种方法也会出现问题的,我们来试验下下面的例子
#include<stdio.h>
#define MAX 2000000010
int main()
{
int i;
int *m;
long *n;
printf("111\n");
//m=(int *)malloc(MAX*sizeof(int));
//for(i=0;i<MAX;i++)
//{
// m[i]=1;
//}
printf("222\n");
n=(long *)malloc(MAX*sizeof(long));
for(i=0;i<MAX;i++)
{
n[i]=1;
}
printf("3333\n");
exit(0);
}
我们会发现,malloc的时候 还是不会出错的,但对其进行全部应用的时候,会发生段错误的,我觉得这和主机的配置有关了
究竟什么原因呢,我现在还不知道,欢迎大家一起讨论