1.为什么会存在动态内存分配
如
int arr[1000];
2. 要学习动态内存开辟,就要了解内存中的三个区
这些函数都包含在:
#include<stdlib.h>
上代码
int main() { //int arr[10]; int*p = (int*)malloc(100 * sizeof(int));//开辟10个整形空间,有可能会开辟失败 if (p == NULL) { printf("malloc error"); return; } //可以使用 int i = 0; for (i = 0; i < 10; i++) { *(p + i)=i; } for (i = 0; i < 10; i++) { printf("%d", p[i]); } //回收空间用free free(p); p = NULL;//用完把他做成空指针 return 0; }
上代码
int main() { /*int *p = (int *)malloc(40);*/ int *p = calloc(10, sizeof(int));//会初始化为0,但参数不一样,其他都一样 if (p == NULL) { printf("错误"); } int i = 0; for (i = 0; i < 10; i++) { printf("%d", *(p + i)); } return 0; }
int main() { /*int *p = (int *)malloc(40);*/ int *p = calloc(10, sizeof(int));//会初始化为0,但参数不一样,其他都一样 if (p == NULL) { printf("错误"); } int i = 0; for (i = 0; i < 10; i++) { printf("%d", *(p + i)); } if (ptr != NULL) { p = ptr; } free(p); p = NULL; return 0; }
realloc实现会出现两种情况