您的位置:首页 > 编程语言 > C语言/C++

C++——多次free和delete导致错误

2016-04-09 19:21 232 查看
多次free和delete将会导致错误:

指针变量本身也是一个变量,它本身也占有内存空间,我们可以用内存中其它内存空间的地址为其赋值。倘若我们不给指针变量给他赋值,而是直接操作这个指针变量,编译器会报错的,因为编译器检测到该指针变量没有初始化,就会认为这是语法错误。所以,使用初始化后的指针变量才是有意义的。delete和new的目的就是在堆内申请一个内存,将这个内存空间的首地址赋给一个指针变量。

free:一次free一个指针的时候,只是清空该指针所指的堆中的对应空间,但该指针变量在栈中的值并没有没清空,它还是指向原来分配的内存空间(但是该内存空间已经不属于该指针了,CPU随时可把该指针原来所指的空间分配给任何一个指针变量)。这时,再free一次时,由于该指针已经没有堆空间与之对应了,所以编译器将会提示出错。在C/C++编程时,malloc和new分配空间及free和delete释放空间是一个难点,这里很容易产生思维误区,所以在实际编程时需要千万注意手动分配的空间,要手动释放,万万不可多次释放同一堆空间。

free 释放这个指针占用的空间,释放后别的指针变量也可以得到这片空间,该空间的值并不一定是NULL。所以free后不能用是否为NULL来判断

delete:当一个指针被delete后,该指针就成了野指针(不指向任何内存空间的指针我们称之为野指针,野指针所指向的地方是随机的)。当再次delete该指针时,编译器就会提示你操作非法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: