关于动态分配内存的问题

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

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

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值