一、malloc和free
int main()
{
//申请十个整形空间
int* p= (int*)malloc(10 * sizeof(int));//连续内存
if (p==NULL)
{
//打印错误原因的一个方式
printf("%s",strerror(errno));
}
else
{
//正常使用空间
int i = 0;
for (i=0;i<10;i++)
{
(p + i) = i;printf("%d ",(p+i));
}
}
//当动态申请空间不再使用,还给系统
free(p);
p = NULL;//不能藕断丝连
return 0;
}
二、calloc-会初始化
int main()
{
int* p=(int*)calloc(10,sizeof(int));
if (p==NULL)
{
printf("%s",strerror(errno));
}
else {
//正常使用空间
int i = 0;
for (i = 0; i < 10; i++) { *(p + i) = i; printf("%d ", *(p + i)); } }
//释放空间
//free函数是用来释放动态开辟的空间的
free(p); p = NULL; return 0;
}
三、realloc 调整动态开辟内存空间的大小,看后面有没有足够的空间,有的话就原地扩容(一般小就原地),
没有就异地(把就空间数据复制过来,然后释放旧的空间,返回新空间地址),代价大。
int main()
{
int* p=(int*)malloc(20);
if (p==NULL)
{
printf("%s",strerror(errno));
}
else
{
//正常使用空间
int i = 0;
for (i = 0; i < 5; i++)
{
*(p + i) = i;
//printf("%d ", *(p + i));
}
}