malloc的头文件是#include<stdlib.h>
malloc开辟的空间虽然和数组一样可以调用,并且都是连续存放的,但是他们所在的位置不一样
malloc开辟的空间位置在堆区;
局部数组是把数据存在栈区;
动态内存空间的大小可以调整;
如果申请成功,会返回开辟好的空间的起始地址;
如果开辟失败,会返回NULL指针;
#include<stdio.h>
#incldue<stdlib.h>
#include<errno.h>
int main()
{
//申请10个整型的空间
int* p = (int*)malloc(10 * sizeof(int));
if (p == NULL)
{
//空间开辟失败
perror("malloc");
return 1;//错误返回1
}
//可以使用这40个字节
int i = 0;
for (i = 0; i < 10; i++)
{
*(p + i) = i + 1;
}
//打印出来看看,是否完成
for (i = 0; i < 10; i++)
{
printf("%d ", *(p + i));
}
printf("\n");
return 0;
}
输出结果:
如果开辟失败:输入一个超级大的数字
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
int main()
{
//申请10个整型的空间
int* p = (int*)malloc(INT_MAX);
if (p == NULL)
{
//空间开辟失败
perror("malloc");
return 1;//错误返回1
}
//可以使用这40个字节
int i = 0;
for (i = 0; i < 10; i++)
{
*(p + i) = i + 1;
}
//打印出来看看,是否完成
for (i = 0; i < 10; i++)
{
printf("%d ", *(p + i));
}
printf("\n");
return 0;
}
输出结果:
最后需要释放malloc申请的空间
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
int main()
{
//申请10个整型的空间
int* p = (int*)malloc(INT_MAX);
if (p == NULL)
{
//空间开辟失败
perror("malloc");
return 1;//错误返回1
}
//可以使用这40个字节
int i = 0;
for (i = 0; i < 10; i++)
{
*(p + i) = i + 1;
}
//打印出来看看,是否完成
for (i = 0; i < 10; i++)
{
printf("%d ", *(p + i));
}
printf("\n");
free(p);
p = NULL;
return 0;
}
free(p);释放p会让p指向的空间不属于当前程序,但是还是可以找到这个空间
所以需要让p=NULL;,让p变成空指针
标签:10,malloc,int,free,printf,空间,include From: https://blog.csdn.net/2301_78189441/article/details/143133930