zoukankan      html  css  js  c++  java
  • C语言之内存分配函数

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int main()
    {
        /*************************************************************
         *  C语言之动态内存分配函数malloc,calloc,realloc,memset
         *
         *  malloc: void *malloc(size_t  size)
         *          包含在库函数stdlib.h中,作用是在内存的堆区分配一个大小为size
         *          的连续空间,如果分配内存成功,函数返回新分配内存的首地址,否则,
         *          返回NULL,一般在写程序需要判断分配内存是否成功,使用完内存后要及
         *          时释放内存。
         *  calloc:void *calloc(size_t  num,size_t  size)
         *          作用是在内存中分配连续大小为num*size的空间,这一点在动态数组内存
         *          分配有所体现,如果分配内存成功,函数返回新分配内存的首地址,否则,
         *          返回NULL。
         *      malloc与calloc区别:
         *          1、calloc在返回指向内存的指针之前把它初始化为0。
         *          2、请求内存数量的方式不同。malloc的参数仅仅是需要分配的
         *            内存字节数;calloc的参数包括元素的数量和每个元素的字节数。
         *   memset:void* memset (void*p, int c, size_t n);
         *         作用:将指针p指向的n个字节的内存全部赋值为c。可以对malloc分配的
         *         内存进行初始化
         *
         *   realloc  void* realloc (void* ptr, size_t size)
         *         改变ptr所指内存区域的大小为size长度,如果重新分配成功则返回指向
         *         被分配内存的指针,否则返回空指针NULL。当内存不再使用时,应使用
         *         free()函数将内存块释放。有一点需要注意:当分配内存成功之后,应
         *         将原本的指针ptr=NULL,否则会形成野指针,可能造成系统崩溃。
         *
         * 提示:不论是以上那种方式申请内存,在申请内存之后,最终都要用free释放空间,
         *     不然会造成内存泄漏。但是内存只能释放一次,不能多次调用free函数。
         *************************************************************/
    
         int *pm, i;
         pm = (int*)malloc(sizeof(int)*100);
         if(NULL != pm)
         {
          printf("使用malloc分配的存储空间
    ");
            for(i=0; i<100; i++)
            {
                printf("%d	", *pm++);
               if((i+1)%10 == 0) printf("
    ");
            }
    
                printf("
    ");
    
               free(pm);
             pm = NULL;
         }
         int *pc;
         pc = (int *)calloc(100, sizeof(int));
         printf("使用calloc分配的存储空间
    ");
         for (int i=0; i<100; i++)
         {
    
             if(NULL != pc)
             {
                 printf("%d	", *pc++ );
                 if((i+1)%10 == 0) printf("
    ");
             }
    
         }
         printf("
    ");
         free(pc);
         pc = NULL;
         int *pms = (int *)malloc(sizeof(int)*100);
         if(NULL != pms)
         {
             memset(pms, 0, 100 );
         }
         printf("使用memset分配的存储空间
    ");
         for (int i=0; i<100; i++)
              {
                  if(NULL != pms)
                  {
                      printf("%d	", *pms++ );
                      if((i+1)%10 == 0) printf("
    ");
                  }
    
              }
         printf("
    ");
         free(pms);
         pms = NULL;
         printf("使用realloc分配的存储空间
    ");
         int *pre = (int *)malloc(sizeof(int) * 50);
         if (NULL != pre)
         {
             pre = (int *)realloc(pre,sizeof(int)*100);
             if (NULL != pre)
             {
                 for (i=0; i<100; i++)
                 {
                     printf("%d	", *pre++);
                     if((i+1)%10 == 0) printf("
    ");
                 }
             }
         }
         printf("
    ");
         free(pre);
         pre = NULL;
    
         return 0;
    }
    使用malloc分配的存储空间
    4138720    4133928    0    0    0    0    0    0    0    0    
    0    0    0    0    0    0    0    0    0    0    
    0    0    0    0    0    0    0    0    0    0    
    0    0    0    0    0    0    0    0    0    0    
    0    0    0    0    0    0    0    0    0    0    
    0    0    0    0    0    0    0    0    0    0    
    0    0    0    0    0    0    0    0    0    0    
    0    0    0    0    0    0    3027544    8    1465662020    1870093388    
    1886612338    1550148449    1869440356    1650803804    710698869    -2147450880    -2147450880    -2147450880    1543503964    11955    
    4138720    4133952    -2147450880    -2147450880    -2147450880    -2147450880    -2147450880    -2147450880    -2147450880    -2147450880    
    
    使用calloc分配的存储空间
    0    0    0    0    0    0    0    0    0    0    
    0    0    0    0    0    0    0    0    0    0    
    0    0    0    0    0    0    0    0    0    0    
    0    0    0    0    0    0    0    0    0    0    
    0    0    0    0    0    0    0    0    0    0    
    0    0    0    0    0    0    0    0    0    0    
    0    0    0    0    0    0    0    0    0    0    
    0    0    0    0    0    0    0    0    0    0    
    0    0    0    0    0    0    0    0    0    0    
    0    0    0    0    0    0    0    0    0    0    
    
    使用memset分配的存储空间
    0    0    0    0    0    0    0    0    0    0    
    0    0    0    0    0    0    0    0    0    0    
    0    0    0    0    0    0    0    0    0    0    
    0    0    0    0    0    0    0    0    0    0    
    0    0    0    0    0    0    0    0    0    0    
    0    0    0    0    0    0    0    0    0    0    
    0    0    0    0    0    0    0    0    0    0    
    0    0    0    0    0    0    0    0    0    0    
    0    0    0    0    0    0    0    0    0    0    
    0    0    0    0    0    0    0    0    0    0    
    
    使用realloc分配的存储空间
    4133528    4133824    4133880    538976288    402653208    11933    4132712    4128964    538976288    538976288    
    538976288    538976288    538976288    538976288    538976288    538976288    538976288    538976288    538976288    538976288    
    538976288    538976288    538976288    538976288    538976288    538976288    538976288    538976288    538976288    538976288    
    538976288    538976288    538976288    -14671840    1684957440    1601402735    134217736    11964    4139504    4128964    
    1113340483    1765954646    1700027502    1551070323    1953721961    1886153825    1634427745    1666999655    1869375859    1818846823    
    0    0    0    0    0    0    0    0    0    0    
    0    0    0    0    0    0    0    0    0    0    
    0    0    0    0    0    0    0    0    0    0    
    0    0    0    0    0    0    0    0    0    0    
    0    0    0    0    0    0    0    0    0    0    
  • 相关阅读:
    VS2010 VC Project的default Include设置
    Linux 下的编辑/编译器
    用命令实现Win7远程桌面关机和重启
    怎样快速刪除Word中超链接?
    chrome浏览器世界之窗浏览器的收藏夹在哪?
    代码量查找工具[最好用的]
    C项目实践--网络协议和套接字编程
    memmove 和 memcopy
    bzoj2456: mode
    bzoj1205: [HNOI2005]星际贸易
  • 原文地址:https://www.cnblogs.com/heml/p/3532326.html
Copyright © 2011-2022 走看看