1.malloc函数和free函数(向内存申请10个空间并释放)
#include <stdio.h>
#include <stdlib.h>
int main()
{
int* p = (int*)malloc(10 * sizeof(int));
if (p == NULL)
{
perror("malloc");
//打印错误信息
return 1;
//程序异常返回非0
}
for (int i = 0; i < 10; i++)
{
*(p + i) = i + 1;
}
free(p);
//释放空间
p = NULL;//将p从野指针转变为空指针
return 0;
}
2.calloc函数和ralloc函数
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
int* p = (int*)calloc(10, sizeof(int));
if (p == NULL)
{
perror("malloc");
//打印错误信息
return 1;
//程序异常返回非0
}
for (int i = 0; i < 10; i++)
{
printf("%d ", *(p + i));
}
int* ptr = (int*)realloc(p,20*sizeof(int));
if (ptr != NULL)
{
p = ptr;
}
free(p);
//释放空间
p = NULL;//将p从野指针转变为空指针
return 0;
}
3.柔性数组
定义 :1.在结构体中
2.最后一个成员
3.未知大小的数组
特点:1.柔性数组前面必须有一个成员
2.可以用malloc函数进行内存分配
4.调整柔性数组arr[]的大小
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
struct s
{
int n;
int arr[];
};
int main()
{
struct s* ps = (struct s*)malloc(sizeof(struct s) + 20 * sizeof(int));
if (ps == NULL)
{
perror("malloc()");
return 1;
}
(*ps).n = 100;
for (int i = 0; i < 20;i++)
{
(*ps).arr[i] = i + 1;
}
struct s* ptr = (struct s*)realloc(ps, sizeof(struct s) + 40 * sizeof(int));
if (ptr != NULL)
{
ps = ptr;
ptr = NULL;
}
else
{
return 1;
}
for (int i = 0; i < 40; i++)
{
printf("%d ", ps->arr[i]);
}
free(ps);
ps = NULL;
return 0;
}