要知道动态内存管理,首先就要了解一下我们的malloc这个函数
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num;
scanf_s("%d", &num);
int* p = (int*)malloc(sizeof(int)*num);//强制类型转换+malloc函数的动态内存管理
//使用malloc函数void* malloc ( size_t size )。
if (p == NULL)
{
printf("malloc::p");
}
else
{
for (int i = 0; i < num; i++)
{
*(p + i) = i;//将i的藏在*(p+i)=p[i]数组中
printf("%d ", *(p + i));//p[i]
}
free(p);
p = NULL;
}
return 0;
}
接下来,我们再来了解一下calloc这个函数
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num;
scanf("%d", &num);
int* p = (int*)calloc(num, sizeof(int));//使用calloc函数void* calloc ( size_t num , size_t size );
if (p == NULL)
{
printf("malloc::p");
}
else
{
for (int i = 0; i < num; i++)
{
*(p + i) = i;
printf("%d ", *(p + i));
}
free(p);
p = NULL;
}
return 0;
}
通过上述这些代码,我们可以知道,其实这些calloc与malloc这两个函数有很大的相同之处,但是,它们之间也存在很大差别,calloc和malloc函数,是否自动初始化,前者是初始化,后者不用初始化
再让我们来了解一下realloc这个函数
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
int* p = (int*)malloc(sizeof(int) * 10);
if (p == NULL) {
perror("malloc::p");
}
else {
printf("%p\n", p);
}
int* ptr = (int*)realloc(p, sizeof(int) * 20);//创建临时变量
//如果使用 int* p = (int*)realloc(p,....这样的话如果创建失败,返回NULL,
//这样的话p的内容就没有了,所以创建临时变量ptr,然后下面判空之后可以交换
if (NULL == ptr) {
perror("realloc::ptr");
}
else {
p = ptr;
ptr = NULL;
printf("%p\n", p);
}
free(p);
p = NULL;
return 0;
}
这就是这三个函数的使用