// 动态内存管理
// 1、malloc 和 free 函数
// void *malloc(size_t size); // 开辟size 个大小的内存块
// int *p = (int *)malloc(sizeof(int));
// 2、动态内存可以调节, 释放内存后, 可以再次使用
// 3、malloc 函数返回的是 void * 类型, 需要进行强制转换
// 4、如果开辟成功, 返回的是一个指针, 否则返回 NULL
// 5、malloc 和数组的空间区别?
// 6、动态内存的大小是可以调整的
// 7、开辟空间的位置不一样:
// 栈区:局部变量、函数形式参数。
// 堆区:动态开辟的内存,malloc、free 、calloc、realloc。静态区:全局变量,static修饰的静态变量
// 8、返回类型是 void* 所以不知道开辟的类型,在调用时决定
// 9、如果size 为0,标准是未定义的,一般返回NULL// int main () {
// // apply memory
// int *p = (int *)malloc(sizeof(int));
// if (p == NULL) {
// printf ("申请内存失败\n");
// perror("malloc");
// return 1;
// }
// // use memory
// int i = 0;
// for (i = 0; i < 10; i++) {
// *(p+i) = i +1;
// // *p = i;
// printf ("%d\n", *p+i);
// }
// // release memory
// // if not free memory, sys will auto release memory when process exit.
// free (p);
// p = NULL; // be released memory, avoid memory leak,impart null pointer.
// return 0;
// }
// 10、malloc 和 free 最好成对使用// 11、calloc 开辟内存, 默认初始化为 0
// int *p = (int *)calloc(1, sizeof(int));// int main()
// {
// // apply memory
// int *p = (int *)calloc (10, sizeof(int));
// if (p == NULL)
// {
//
// perror("calloc");
// return 1;
// }
// // use memory
// int i =0;
// for (i = 0; i < 10; i++)
// {
// p[i] = i;
// printf ("%d\n", p[i]);
// }
// // free memory
// free(p);
// p = NULL;
// return 0;
// }// 7、realloc 函数
// p 是要调整的内存地址 , size 是要调整的大小
// int *p = (int *)malloc(sizeof(int));
// *p = 10;
// int *newp = (int *)realloc(p, 2 * sizeof(int));
// realloc 调整空间时,有两种情况
// 1、空间不够,在内存的堆区则申请新满足大小的空间,并把原数据拷贝到新空间,释放旧的空间,并返回新空间地址
// 2、空间够,则直接返回旧地址// int main() {
// // 申请内存
// int *p = (int *)malloc(sizeof(int));
// if (p == NULL) {
// perror("malloc");
// return -1;
// }
// // 调整空间
// *p = 10;
// int *newp = (int *)realloc(p, 4 * sizeof(int)); // 不能再次赋给p 只能新建一个,realloc 第一个参数必须是旧地址
// if (newp != NULL) {
// p = newp;
// }
// else {
// perror("realloc");
// }
// // 使用
// int i = 0;
// for (i = 0; i < 16; i++) {
// *(p + i) = i;
// printf("%d\n", *(p + i));
// }
// // 释放
// free(newp);
// newp = NULL;
// return 0;
// }
//