这两天看完一本叫《高质量C/C++编程指南》的书,一本很不错的书。前部分在讲编程风格,中间部分主要讲C编程要注意的问题,大部分的篇幅讲的是C++编程要注意的问题。
    其中有一节——杜绝“野指针”,所谓的野指针就是不是NULL指针,指向“垃圾内容的指针”。
    产生“野指针”主要有两种情况
    (1)指针变量没有被初始化。如:
         char *p = NULL;
             char *str = (char *) malloc(100);
      (2)指针被free()后没有被置NULL。如:
         char * p=(char *)malloc(sizeof(char));
             ~/*做一系列操作*/
             free(p);
             也许大部分刚从学校出来的人都认为以上那段程序就已经可以了,mallco(),free()成对出现,应该是没有问题的。
    在Topping和我们几个新人在讨论这问题时,我们七嘴八舌的将“野指针”讨论的一番。没想到Topping突然问道,那为什么不在free()过程中直接将它置NULL呢?这个问题把我们问蒙了。我们看了书,只知道不能那么做,可重来没想过,为什么free()不实现了呢?而给我们留下隐患呢?
    确实,为什么我们没想到这个问题呢?学习过程中还是没有多思考。反思中……
------------------------------------------------------------------------------------------------------------------
问题的答案:
free(*p)
{

     p=NULL;/*在free()中加一条置NULL的语句*/
}

void main()
{
       char *q=(char *)malloc(sizeof(char));
       free(q);
      /*此后q仍然不为NULL  原因是:那条语句不起作用,除非free()函数的原形为free(**p)才可以实现*/
     /*其他语句*/
}