• 关于free和delete的使用


    上一篇篇幅太长,这里再区分free和delete的用法。

    两个同时存在是有它的原因的,我们前面说过,free是函数,它只释放内存,但不会调用析构函数,如果用free去释放new申请的空间,会因为无法调用析构函数而出现不必要的错误。

    char *point = (char *) malloc(100);  

    strcpy(point, “hello”);  

    free(point); // Be careful here,point 所指的内存被释放,but point 所指的地址仍然不变  

    …  

    if(point != NULL) // 没有起到防错作用  

    {  

    strcpy(point, “jackery”); // error  

    }

    这段程序中,原来free和delete只是把指针所指的内存给释放掉,但并没有把指针本身干掉。指针point被free以后其地址仍然不变(非NULL),只是该地址对应的内存是垃圾,point成了“野指针”。如果此时不把point设置为NULL,会让人误以为point是个合法的指针。如果程序比较长,我们有时记不住 point 所指的内存是否已经被释放,在继续使用point 之前,通常会用语句if (p != NULL)进行防错处理。很遗憾,此时if语句起不到防错作用,因为即便point不是NULL指针,它也不指向合法的内存块。为了避免失误,最好在free之后或者之前,将指针指向NULL

  • 相关阅读:
    洛谷P2444 病毒【AC自动机】
    AC自动机
    洛谷试炼场2-5---字符串处理【字符串】
    洛谷试炼场1-5---简单字符串【字符串】
    poj2185 Milking Grid【KMP】
    poj3630 Phone List【Trie树】
    CH1809匹配统计【KMP】
    打包命令
    django_auth模块
    mongodb-Configuration
  • 原文地址:https://www.cnblogs.com/mini-coconut/p/8555018.html
Copyright © 2020-2023  润新知