动态数组及动态内存_沉浸在在代码世界的小小程序猿_新浪博客

本文介绍了C语言中动态内存管理的四个关键函数:malloc(), calloc(), realloc() 和 free() 的使用方法及其注意事项,包括如何创建和释放动态数组,并讨论了可能导致程序崩溃的常见错误。
摘要由CSDN通过智能技术生成
1.malloc();创建内存
   例如创建n个整型单元
   int*p=(int*)malloc(n*sizeof(int))
如果要将创建十个整型单元并且全部赋值为0,即运用一个for()循环:
  int*p=(int*)malloc(10*sizeof(int));
  for(int i=0;i
  {
       p[i]=0;
   } 
  则可以引入:
2.calloc();赋值为0
   即上述可直接更换为:  int*p=(int*)calloc(10,sizeof(int));
   在使用过程中发现p长度不够用,需要20个整型单元,即
    int *p = (int *)malloc(10*sizeof(int));
    for(int i=0;i<10;i++)
    {
      p[i] = i;
    }
    int *q = (int *)malloc(20*sizeof(int));
    for(int i=0;i<10;i++) 
    {
        q[i] = p[i];
    }
    free(p); 
    p = q;  
    q = NULL;
    free(p);
   则此时可以引入:
3.realloc();扩容
即上述可直接更换为: 
    int *p = (int *)malloc(10*sizeof(int));
    for(int i=0;i<10;i++)
    {
         p[i] = i;
     }
     printf("%d\n",p);
     p = (int *)realloc(p,10*sizeof(int));
     printf("%d\n",p);
创建动态数组:利用malloc创建内存,利用free释放内存,如果没有释放,则出现内存泄露则可用内存越来越少,设备速度越来越慢;
       动态内存最大的问题及为内存泄露,即引入:
4.free();用来释放申请的内存
  而free();有时候会出现崩溃,崩溃有以下三个原因:
一越界:(破坏了尾)
int *p = (int *)malloc(10);//越界
 for(int i=0;i<10;i++)
 {
  p[i] = 0;
 }
 free(p);
二指针的指向移动(破坏了头)
int* p = (int *)malloc(10*sizeof(int));
 for(int i=0;i<10;i++)
 {
  *p = 0;
  p++;//p的位置发生了移动
 }
 free(p);
三重复释放同一段内存:
例如在扩容的事例中:
int *p = (int *)malloc(10*sizeof(int));
 for(int i=0;i<10;i++)
 {
  p[i] = i;
 }
 int *q = (int *)malloc(20*sizeof(int));
 for(int i=0;i<10;i++) 
 {
  q[i] = p[i];
 }
 free(p); 
 p = q;  
 q = NULL;
 free(p);
 free(q);//重复释放


   
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值