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);