malloc与free注意事项:
删除一个指针p (free(p);),实际是删除了p所指的目标(变量或对象)释放了它所占的堆空间,而不是删除 p本身量或对象等),释放堆空间后,p成了空悬指针 动态分配失败。返回一个空指针 (NULL),表示发生了异常堆资源不足,分配失败。
malloc与free是配对使用的, free只能释放堆空间。如果malloc返回的指针值丢失,则所分配的堆空间无法回收,称内存泄漏,同一空间重复释放也是危险的,因为该空间可能已另分配,所以必须妥善保存malloc返回的指针,以保证不发生内存泄漏,也必须保证不会重复释放堆内存空间。
malloc/free:
1、野指针:不是NULL指针,是指向“垃圾”(当前不需要的指针)内存的指针。
“野指针”是很危险的。
2、“野指针”的形成原因主要有两种:
指针变量没有初始化;
指针p被free之后,没有置为NULL,让人误以为p是个合法的指针。
例子:(正确的)
char *p=NULL; p=(char *)malloc(10); if(p==NULL){ return -1; }else { strcpy(p,"KeVin"); printf("%s",p); } free(p); p=NULL;