malloc free calloc realloc
void *malloc(size_num);
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
int main()
{ //向内存申请10个整型的空间
int *p = (int *)malloc(10*sizeof(int));
//判断是否开辟失败;
if(p==NULL)
{
printf("%s\n",strerror(errno));//打印错误原因的一个方式
}
else
{//正常使用空间
int i=0;
for(i=0;i<10;i++)
{
*(p+i)=i;
}
for(i=0;i<10;i++)
{
printf("%d",*(p+i));
}
}
//当申请的空间不再使用,要将空间释放
free(p);
return 0;
}
void*calloc(size_num,size_type)//会将每个申请的字节初始化为0
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
int main()
{ //向内存申请10个整型的空间
int *p = (int *)calloc(10,sizeof(int));//calloc函数给每个字节初始化为0
//判断是否开辟失败;
if(p==NULL)
{
printf("%s\n",strerror(errno));//打印错误原因的一个方式
}
else
{//正常使用空间
int i=0;
for(i=0;i<10;i++)
{
printf("%d",*(p+i));
}
}
//当申请的空间不再使用,要将空间释放
free(p);
return 0;
}
void*realloc(void*mem block,size)//调整动态开辟内存的大小
int main()
{
int *p=(int *)malloc(20);
if(p==NULL)
{
printf("%s\n",strerror(errno));
}
else
{
int i=0;
for(i=0;i<5;i++)
{
*(p+i)=i;
}
}
//上面使用的是malloc开辟的20个字节的空间
//若还不满足需求,可以使用realloc增加内存空间
int *p2=realloc(p,40);//当申请的空间太大,函数会重新开辟一个足够大的空间,但返回的地址发生改变
if(p2!=NULL)
{
p=p2;
}
for(i=5;i<10;i++)
{
*(p2+i)=i;
}
free(p);
}
对动态开辟内存的越界访问