【C】简单动态内存开辟(1)!!

来源:互联网 发布:宁波plc编程招聘 编辑:程序博客网 时间:2024/05/17 02:49

malloc函数

在c语言标准库里面提供了函数malloc,这个函数是想内存池里面申请内存(字节为单位)。当一个程序另外需要一些内存的时候就可以调用malloc函数来获取一块适合的内存,当用户调用成功时,函数会返回一个内存的地址。注意:这里申请成功的内存并没有初始化,里面存的是一些随机值,因此当申请成功一块内存的时候初始化非常有必要。


#include<stdio.h>#include <stdlib.h>#include <string.h>int main(){int *p = malloc(10*sizeof(int));      //malloc函数向内存里面申请10个int型的内存(40字节)int i = 0;for (i=0;i<10;i++){*(p+i) = i;}for (i=0;i<10;i++){printf("%d ",*(p+i));}free(p);                                 //free函数将申请好的 内存释放memset(p,0,10*sizeof(int));              //memset函数将释放掉的内存进行初始化为0return 0;}
注:malloc函数一定要和free函数成对使用,否则将会造成内存泄露

free函数

这个函数是释放掉用malloc函数申请的内存,free函数的参数要么是NULL,要么是用malloc函数申请成功的一块内存的地址,当调用完free函数时,申请成功的内存会还给操作系统,但是这块内存的数据并没有销毁,这是就编写程序时候就要在free函数后面对这块内存里面的数据进行销毁(一般初始化成0)。这样就进一步提高了了代码的安全性。

calloc函数

calloc函数功能和malloc函数相似,但是调用calloc函数申请的内存是经过初始化的,calloc函数将申请的内存初始化成0.他们的而不同点在于calloc函数的参数包括所需元素的个数和每个元素的字节数,根据这些参数,函数可以知道开辟多大的内存。

#include<stdio.h>#include <stdlib.h>#include <string.h>int main(){int *p = calloc(10,sizeof(int ));//利用calloc函数申请40个字节的内存空间//int *p = malloc(10*sizeof(int));int i = 0;for (i=0;i<10;i++){*(p+i) = i;}for (i=0;i<10;i++){printf("%d ",*(p+i));}free(p);memset(p,0,10*sizeof(int));return 0;}


 realloc函数

realloc函数适用于修改一块原来已经分配好的内存,使用这个函数可以将这块内存扩大或者缩小,在扩大的时候,realloc函数是另外开辟一快内存,同时将原来内存里面的数据进行复制到新开辟的内存里面,达到扩大内存的母的,这时值得注意的是,后面的指针就不可以指向原来开辟的那快内存的地址。在缩小内存时候,同样是另外开辟一块内存,但是在复制的时候,在多余的那块内存里面的数据就会被拿掉,其余的数据保留。