zoukankan      html  css  js  c++  java
  • c++内存的分配与释放 malloc与new

    C++中指针的操作内存:分配用malloc()分配内存和用free()释放内存。

    int *point;
    int a[5];
    point = &a;
    point = NULL;

    这里省略的是int *point = new int;
    让指针等于NULL并没有释放内存。

    ,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。(new char;  delete char;new char2[2]; delete[] char2;)

    自由存储区,就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。
    意思就是new的内存用delete来释放
    malloc的内存用free来释放



    int *point;
    int a[5];
    point = &a;
    point = NULL;
    delete point;

    为什么这里要先将指针设为NULL再delete?

    把指针清0是个好习惯,因为你delete后,原本那块内存的数据已经让你释放了,内存重新收回。但此时的指针变量point还在,依然指向那块内存,在以后的代码中若不小心继续调用指针变量,会出现不可预料的错误。 delete指针之后再调用,就出现了野指针,造成程序崩溃。

    malloc例子
    释放指针中的某一个元素
    FPoint3 *centers = (FPoint3*) malloc( NumTri * sizeof(FPoint3));
    //初始化
    for(int i=0; i<NumTri; i++)
    centers[i] = point;

    //释放指针中的某一元素
    int j = 3;
    free[centers[3]];
    //释放整个指针
    centers = NULL;
    free(centers);


  • 相关阅读:
    Codeforces Round #313 (Div. 2) D. Equivalent Strings 解题心得
    UVA
    2015 HUAS Summer Contest#1~A
    2015 HUAS Summer Training#2~D
    2015 HUAS Summer Training#2~C
    2015 HUAS Summer Training#2~E
    2015 HUAS Summer Training#2~A
    2015 HUAS Provincial Select Contest #1
    2015 HUAS Provincial Select Contest #1~F
    2015 HUAS Provincial Select Contest #2~A
  • 原文地址:https://www.cnblogs.com/qingsunny/p/3223312.html
Copyright © 2011-2022 走看看