关于动态分配内存的问题

要分配一个很大的一维数组

如 #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 "); //m=(int *)malloc(MAX*sizeof(int)); //for(i=0;i<MAX;i++) //{ // m[i]=1; //} printf("222 "); n=(long *)malloc(MAX*sizeof(long)); for(i=0;i<MAX;i++) { n[i]=1; } printf("3333 "); exit(0); }

我们会发现,malloc的时候 还是不会出错的,但对其进行全部应用的时候,会发生段错误的,我觉得这和主机的配置有关了

经验分享 程序员 微信小程序 职场和发展