// char *str = "vaercly";
// *str = 'd';
//堆区内存分配函数
//malloc, 需要指定需要开辟的空间大小
//返回在堆区开辟空间的地址 void * 泛型,可以代表所有的指针类型 比如: char *, int *, float * , Student *
// char *p = malloc(8);//这时要确定开辟的空间要存储的数据类型
// p = "android";
// strcpy(p, "android");
// printf("%s\n", p);
// *(p + 4) = 'b';
// printf("%s\n", p);
//释放堆区内存
// free(p);//删除只是标记删除, 不会删除内容
// free(p);//过度释放(理解crash)
// printf("%s\n", p);
//1 野指针错误
//产生原因: 访问不该访问的内存(已经没有使用权的内存, 空间已经释放还给了系统)
//解决方案: 释放内存所有权的同时, 将地址也清除掉
// p = NULL;//指向无效的空间
//2 过度释放
//产生原因: 对一块内存释放(free)多次
//解决方案: 保证只释放一次, 将其他的释放操作删除掉
//3 内存泄漏
//产生原因: 分配了内存, 使用完之后, 没有释放掉, 造成内存堆积, 最后回=会因为没有内存可分配, 而造成程序crash
//解决方案: 内存使用完后, 立即释放掉