没有合适的资源?快使用搜索试试~ 我知道了~
首页C++ 使用new与delete需注意的原则
C++的动态内存管理是通过new和delete两个操作来完成的,即用new来申请空间,用delete来释放空间。在使用new和delete时,注意以下原则。 1.new与delete需一一对应 用new操作申请空间,如果申请成功,必须在以后的某个时刻用delete释放该空间,既不能忘记释放,也不能多次释放。前者会引起内存泄露,后者会引起运行时错误。如下面的程序。 #include <iostream> using namespace std; int main() { int *p; p=new int(3); if(p) { delete p; } delete p; r
资源详情
资源评论
资源推荐

C++ 使用使用new与与delete需注意的原则需注意的原则
C++的动态内存管理是通过new和delete两个操作来完成的,即用new来申请空间,用delete来释放空间。在使用new和delete
时,注意以下原则。
1.new与与delete需一一对应需一一对应
用new操作申请空间,如果申请成功,必须在以后的某个时刻用delete释放该空间,既不能忘记释放,也不能多次释放。前者
会引起内存泄露,后者会引起运行时错误。如下面的程序。
#include <iostream>
using namespace std;
int main()
{
int *p;
p=new int(3);
if(p)
{
delete p;
}
delete p;
return 0;
}
以上程序对指针p所指向的空间进行两次释放,这种内存错误对C++程序危害极大,也是很多人对C++忘而却步的原因。多次
释放同一块内存空间,并不一定立即引起程序运行错误,也不一定会导致程序运行的崩溃,这跟具体的编译器实现有关。但
是,多次释放同一块内存空间绝对是一个编程错误,这个编程错误可能会在其后的某个时刻导致其他的逻辑错误的发生,从而
给程序的调试和纠错带来困难。考察如下程序。
#include <iostream>
using namespace std;
int main()
{
int *p,*q,*one;
one=new int;
if(one)
{
cout<<one<<endl;
}
delete one;
p=new int(3);
if(p)
{
cout<<p<<endl;
}
delete one;//假设这句语句是程序员不小心加上的
q=new int(5);
if(q)
{
cout<<q<<endl;
}
cout<<(*p)+(*q)<<endl;
delete p;
delete q;
}
程序通过编译,运行结果如下:
003289A0
003289A0
003289A0
10
程序运行过程中会产生中断。从程序的输出可以看出,在将指针one所指向的空间释放后,为指针p申请的空间就是原来one所
指向的空间。由于不小心在为p分配空间之后再次使用了delete one,导致q申请到的空间就是原来p所申请的空间,这样赋给
*q的值就改写了原来p所指向的单元的值,导致最后输出结果为10。由此可知,多次释放同一块内存空间,即使不导致程序运



















weixin_38707342
- 粉丝: 7
- 资源: 925
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助

会员权益专享
最新资源
- Xilinx SRIO详解.pptx
- Informatica PowerCenter 10.2 for Centos7.6安装配置说明.pdf
- 现代无线系统射频电路实用设计卷II 英文版.pdf
- 电子产品可靠性设计 自己讲课用的PPT,包括设计方案的可靠性选择,元器件的选择与使用,降额设计,热设计,余度设计,参数优化设计 和 失效分析等
- MPC5744P-DEV-KIT-REVE-QSG.pdf
- 通信原理课程设计报告(ASK FSK PSK Matlab仿真--数字调制技术的仿真实现及性能研究)
- ORIGIN7.0使用说明
- 在VMware Player 3.1.3下安装Redhat Linux详尽步骤
- python学生信息管理系统实现代码
- 西门子MES手册 13 OpcenterEXCR_PortalStudio1_81RB1.pdf
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制

评论0