在指針滿天飛的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++運算符)?點擊這裏,你能夠找到答案!函數