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函数将释放掉的内存进行初始化为0
return 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函数是另外开辟一快内存,同时将原来内存里面的数据进行复制到新开辟的内存里面,达到扩大内存的母的,这时值得注意的是,后面的指针就不可以指向原来开辟的那快内存的地址。在缩小内存时候,同样是另外开辟一块内存,但是在复制的时候,在多余的那块内存里面的数据就会被拿掉,其余的数据保留。