野指针:释放指针所指向的内存空间,和指针无关
//在堆区分配100*sizeof(char)个字节的内存;
char *p=(char *)malloc(100*sizeof(char));
//在用完后释放内存
free(p);
//这时候指针p所指向的存空间被释放。
//但是这个时候p指针的值没有发生变化,然后所指的内存空间已经没有了意义。
//指针p成为了野指针。
//解决办法很简单如下:
p=NULL;
free(p);//这个时候程序出现问题,因为已经释放了。
//所以在释放内存之前,要先判断是否为NULL指针。
//在释放内存之后,要给指针赋NULL值,也只为了避免再次free程序出现问题。
内存泄漏:堆区的内存由程序员分配和释放,如果只分配没有释放,每次只浪费一个字节的话,数量多的话,系统内存也会被用完
char * p=(char *) malloc(100*sizeof(char));
//malloc、new都在堆区分配内存
p=(char *) malloc(10000*sizeof(char));
p=(char *) malloc(10000*sizeof(char));
p=(char *) malloc(10000*sizeof(char));
p=(char *) malloc(10000*sizeof(char));
//如果一直这样只分配不释放,内存早晚会用完。
//即内存泄漏
内存溢出:定义一个double类型的一个变量,编译器分配8个字节的内存,但是这时候内存空间只剩下4个字节的内存,不够分配,这时候成为内存溢出。