动态分配存储空间
需要包含stdlib库
- malloc
void *malloc(size_t n);
- 存储空间分配成功后,返回指向n字节大小存储空间的指针;分配失败返回NULL
- 分配的存储空间未进行初始化
- calloc
void *calloc(size_t n, size_t size);
- 存储空间分配成功后,返回指向n个size大小空间数组的指针;分配失败返回NULL
- 分配的存储空间被初始化为0
释放动态分配的存储空间
free
free(p);//p为之前通过malloc或calloc返回的指针
- free之后就不要再用指针p了,因为它指向的内容操作系统认为是没有分配过的
- free之后最好p置NULL
代码示例
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
int *pi;
pi = (int *)malloc(sizeof(int)); //分配int大小的空间,使用int指针接收
*pi = 10;
printf("pi is %d\n", *pi);
free(pi);//释放pi,释放分配的空间
*pi = 100; //依然可以使用,但是很危险,操作系统可能会把这个内存分给其他指针
printf("After free pi is: %d\n", *pi);
int *pi2 = (int *)malloc(sizeof(int));
*pi2 = 200;
printf("pi2 is %d\n", *pi2);
printf("After free pi is: %d\n", *pi); //不再是100了
free(pi2);
pi = NULL;
pi2 = NULL;
return 0;
}
运行结果
pi is 10
After free pi is: 100
pi2 is 200
After free pi is: 200