C++——多次free和delete导致错误
来源:互联网 发布:手机影集制作软件 编辑:程序博客网 时间:2024/06/05 14:30
多次free和delete将会导致错误:
指针变量本身也是一个变量,它本身也占有内存空间,我们可以用内存中其它内存空间的地址为其赋值。倘若我们不给指针变量给他赋值,而是直接操作这个指针变量,编译器会报错的,因为编译器检测到该指针变量没有初始化,就会认为这是语法错误。所以,使用初始化后的指针变量才是有意义的。delete和new的目的就是在堆内申请一个内存,将这个内存空间的首地址赋给一个指针变量。
free:一次free一个指针的时候,只是清空该指针所指的堆中的对应空间,但该指针变量在栈中的值并没有没清空,它还是指向原来分配的内存空间(但是该内存空间已经不属于该指针了,CPU随时可把该指针原来所指的空间分配给任何一个指针变量)。这时,再free一次时,由于该指针已经没有堆空间与之对应了,所以编译器将会提示出错。在C/C++编程时,malloc和new分配空间及free和delete释放空间是一个难点,这里很容易产生思维误区,所以在实际编程时需要千万注意手动分配的空间,要手动释放,万万不可多次释放同一堆空间。
free 释放这个指针占用的空间,释放后别的指针变量也可以得到这片空间,该空间的值并不一定是NULL。所以free后不能用是否为NULL来判断。
delete:当一个指针被delete后,该指针就成了野指针(不指向任何内存空间的指针我们称之为野指针,野指针所指向的地方是随机的)。当再次delete该指针时,编译器就会提示你操作非法。
0 0
- C++——多次free和delete导致错误
- C语言中频繁的malloc和free导致的free()错误
- C++malloc/free和new/delete
- c++free delete
- 学习笔记II——new/delete和malloc/free
- [C/C++] malloc/free和new/delete的区别
- free和delete
- free和delete
- free和delete
- 理解delete和free
- delete 和 free
- Free和Delete
- 10.c++-new/delete和malloc/free读书笔记
- C/C++ 中 new/delete 和 malloc/free 区别
- c的free和c++的delete的区别
- c/c++中malloc/free和new/delete的区别
- c的free和c++的delete的区别
- C的free和C++的delete的区别
- Red and Black
- 利用sharepoint 创建轻量型应用之配置传入电子邮件!
- Java泛型
- [BZOJ1059] [ZJOI2007] 矩阵游戏 - 二分图匹配
- Android之Activity的生命周期
- C++——多次free和delete导致错误
- 字符串函数的实现
- 未重新服务器而导致的错误java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is
- c++第三次实验——作业
- HDU 1062 Text Reverse
- java反射机制
- UVA - 12186 Another Crisis 水树形dp
- JavaScript编写人机对战五子棋(六)
- View 的位置参数