动态内存函数
1. malloc和free
Malloc:向内存申请一块连续可用的空间。
Void*malloc(size_t size)//如果参数size为0,则函数的标准未定义
Free:释放所申请的动态内存空间。
#include "stdio.h"
#include "windows.h"
int main()
{
int num = 0;
scanf_s("%d", &num);
int arr[] = { 0 };
int *ptr = NULL;
ptr = (int *)malloc(num*sizeof(int));//开辟一段空间,如果开辟成功,则指向
那段空间;
if (NULL != ptr)
{
int i = 0;
for (i = 0; i < num; i++)
{
*(ptr + i) = 0;
}
}
printf("%p\n", ptr);
free(ptr);//释放ptr所指向的动态内存,空间已经归还计算机
printf("%p\n", ptr);
ptr = NULL;//ptr指向的内存已经无效,即相当于开辟空间失败,则,返回NULL指针,所以malloc返回值一定要检查
system("pause");
return 0;
}
由运行结果可以看出,释放前和释放后,ptr所指向的地址相同,只是释放后变得无效。
2. calloc函数
Void *calloc(size_t num,size_t size)
为num 个大小为size的元素开辟一段空间,将size个字节初始化为0.
#include "stdio.h"
#include "windows.h"
int main()
{
int *ptr = (int *)calloc(10,sizeof(int));//开辟一段空间
if (NULL != ptr)
{
}
printf("%p\n", ptr);
free(ptr);//释放ptr所指向的动态内存,空间已经归还计算机
printf("%p\n", ptr);
ptr = NULL;//ptr指向的内存已经无效
system("pause");
return 0;
}
Calloc和malloc函数的作用基本相同,但是在返回地址之前会将申请到的空间里的每个字节初始化为0。
3. Realloc函数
Realloc: 对动态开辟内存大小可以调整
Void *realloc (void *ptr ,size_t size)
include "stdio.h"
#include "windows.h"
int main()
{
int *ptr = malloc(100);//开辟一段空间
if (NULL != ptr)
{
}
else
{
exit(EXIT_FAILURE);
}
int *p = NULL;
ptr = realloc(ptr, 1000);//将要申请的内存空间扩展1000;但是可能会出现内存泄漏
if (NULL != ptr)
{
p = ptr;
}
free(p);//释放ptr所指向的动态内存,空间已经归还计算机
system("pause");
return 0;