关于动态分配内存的问题

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

如  #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的时候 还是不会出错的,但对其进行全部应用的时候,会发生段错误的,我觉得这和主机的配置有关了

究竟什么原因呢,我现在还不知道,欢迎大家一起讨论 


你可能感兴趣的:(编程,c,linux)