使用malloc和free函数进行内存动态分配

                 1、在学习c语言里面,内存分配这个话题很是有意思,由于咱们平时在开发的时候,若是一不当心没注意内存释放的话,写的的程序很容易出错,因此今天就来回顾一下c语言里面的内存动态分配,下面咱们先来看一个实例来进行分析数组

 1 #include <stdio.h>
 2 #include <malloc.h>
 3 int main(void)
 4 {
 5     int a[5] = {4, 10, 2, 8, 6};
 6     int len;
 7     printf("请输入数组的长度大小:len= ");
 8     scanf("%d",&len);
 9     int * pArr = (int *)malloc(sizeof(int) * len);
10     *pArr =4;
11     pArr[1] =10;a
12     printf("%d %d\n", *pArr, pArr[1]);
13     free(pArr);
14 
15     return 0;
16 }

程序代码说明:函数

        一、(int *)malloc(sizeof(int) * len)这句话的意思是:学习

                a、这里使用了函数sizeof返回数据类型为int 的数组字节个数,同时这里要注意咱们这里写的malloc函数只有一个形参,表示要求系统分配的字节数spa

                b、malloc函数的功能是请求系统sizeof(int) * len个字节的内存空间,若是请求分配成功的话,则返回第一个字节的地址,若是分配不成功的话,则返回NULL。code

                c、malloc函数能且只能返回第一个字节的地址,因此咱们须要把这个无实际意义的第一个字节的地址(俗称干地址)转化为有实际意义的地址,因此malloc函数前面必须加(数据类型  *),表示把这个无实际意义的地址转为相应数据类型的地址。blog

               d、因此这里这句话的意思是把系统分配好的20个字节的第一个字节的地址转为四个字节,这样p就指向了第一个的四个字节,pArr+1就指向了第2个的四个字节,pArr+i就指向了第i+1个的四个字节。pArr[0]就是第一个元素,pArr[i]就是i+1个元素内存

       二、经过上面的分析,上面的代码*pArr=4(也能够写成a[0]=4),pArr[1]=10(也能够写成a[1]=10),同时在分配了20个字节的系统内存后,使用了free()函数进行了释放内存,这样就不会形成系统内存的浪费开发

       三、最终结果为:io

  

          2、接下来我使用for循环来访问数组,代码以下:for循环

 1 #include <stdio.h>
 2 #include <malloc.h>
 3 int main(void)
 4 {
 5     int a[5] = {4, 10, 2, 8, 6};
 6     int len;
 7     int i=0;
 8     printf("请输入数组的大小:len= ");
 9     scanf("%d",&len);
10     int * pArr = (int *)malloc(sizeof(int) * len);
11     for( i=0; i<len;++i)
12     {
13         scanf("%d",&pArr[i]);
14     } 
15     for(i=0;i<len;++i)
16     {
17         printf("%d\n",*(pArr+i));
18     }
19     free(pArr);
20 
21     return 0;
22 }

 运行结果以下:

       

         3、跨函数使用内存例子:

 1 #include <stdio.h>
 2 #include <malloc.h>
 3 struct student
 4 {
 5     int sid;
 6     int age;
 7 };
 8 struct student * creatstudent(void);
 9 void showstudent(struct student *);
10 int main(void)
11 {
12     struct student  *ps ;
13     ps=creatstudent();
14     showstudent(ps);
15     
16     free(ps);
17     return 0;
18 }
19 void showstudent(struct student *pst)
20 {
21     printf("%d %d\n",pst->sid, pst->age);    
22 }
23 struct student * creatstudent(void)
24 {
25     struct student * p =(struct student *)malloc(sizeof(struct student));
26     p->sid=99;
27     p->age=21;
28     return p;
29 }

   运行效果以下:

      

  程序说明:

      这里咱们经过创建函数来分配内存单元,来达到内存灵活分配使用。

相关文章
相关标签/搜索