在指针满天飞的C/C++世界,是否已经熟悉并默认了一些东西,而让咱们失去了更深入思考的能力?也许你对new/delete 或者malloc/free已经司空见惯,可曾相关在你手下delete/free一块对内存,到底发生了什么?请看下面的程序:c++
char *point = (char *) malloc(100); strcpy(point, “hello”); free(point); // Be careful here,point 所指的内存被释放,but point 所指的地址仍然不变 … if(point != NULL) // 没有起到防错做用 { strcpy(point, “jackery”); // error }</span>
所谓的C++/C free or delete 一个变量指针或者数组,是作了哪些事情呢?原来free和delete只是把指针所指的内存给释放掉,但并无把指针自己干掉。若是你follow一下,就会发现指针point被free之后其地址仍然不变(非NULL),只是数组
该地址对应的内存是垃圾,point成了“野指针”。若是此时不把point设置为NULL,会让人误觉得point是个合法的指针。若是程序比较长,咱们有时记不住 point 所指的内存是否已经被释放,在继续使用point 之前,一般会用语句if (p != NULL)进行防错处理。很遗憾,此时if语句起不到防错做用,由于即使point不是NULL指针,它也不指向合法的内存块。你可能还有疑问,有了malloc/free (C/C++标准可函数),为什么还要来个new/delete (c++运算符)?点击这里,你能够找到答案!函数