C++ 中关于new和delete使用的一些疑问
Q1.new和delete必须成对使用吗?Q2.如果使用了new,不使用delete会有什么后果?Q3.先看个例子:char*functiontest(){returnn...
Q1.new 和 delete 必须成对使用吗?
Q2.如果使用了new,不使用delete会有什么后果?
Q3.先看个例子:
char* function test() {
return new char[10];
}
char *c = test();
delete c; // 这么做正确吗?如果不正确那正确的方法是什么?
Q4.如果我new了一块内存区域,没有delete,那么在程序结束的时候会自动帮我释放吗? 展开
Q2.如果使用了new,不使用delete会有什么后果?
Q3.先看个例子:
char* function test() {
return new char[10];
}
char *c = test();
delete c; // 这么做正确吗?如果不正确那正确的方法是什么?
Q4.如果我new了一块内存区域,没有delete,那么在程序结束的时候会自动帮我释放吗? 展开
3个回答
展开全部
A1. new和delete一般要成对使用。new开辟内存,delete删除内存。
A2.如果使用了new不delete程序会怎么样?这个要看你的程序。反正你要知道,new的内存如果不delete,该程序结束之前,这个内存不会释放掉。也就是说如果你的程序中常常new一些内存而不delete,你的程序占用的内存会不断增大。但是有一些全局数据,可以new了不delete,在程序开始运行时,创建这些数据,程序运行过程中使用这些数据,直到程序结束。
A3.写法错误。 如果new一个数组,必须使用delete[]符号。
A4.现代操作系统,程序结束后,会收回这个程序所占用的内存,也就是该程序占用的内存会全部得到释放。
A2.如果使用了new不delete程序会怎么样?这个要看你的程序。反正你要知道,new的内存如果不delete,该程序结束之前,这个内存不会释放掉。也就是说如果你的程序中常常new一些内存而不delete,你的程序占用的内存会不断增大。但是有一些全局数据,可以new了不delete,在程序开始运行时,创建这些数据,程序运行过程中使用这些数据,直到程序结束。
A3.写法错误。 如果new一个数组,必须使用delete[]符号。
A4.现代操作系统,程序结束后,会收回这个程序所占用的内存,也就是该程序占用的内存会全部得到释放。
展开全部
你好,
new 和delete必须成对使用,如果new了一块内存而不去delete这就是所谓的内存泄露
也学这样做当时是不会出现问题,但是假如你的程序需要长时间运行,并且不断的new分配 了内存却没有delete,可想而知,系统最后会因为内存耗尽而挂掉。
test函数内部分配了内存,那么必须明确调用函数时必须在函数外部对这块内存进行释放
所以你锁提供的这段程序是正确的。但是要写这样的函数,这么做是很危险的,但是这么做有时候也是无可避免的,因为如果别人来调用你的函数很可能就不会再外部调用delete了,所以一定要写好注释
最后一个问题,只要明确一点,一旦程序进程结束了,那么与此进程相关的一切资源都将销毁。
new 和delete必须成对使用,如果new了一块内存而不去delete这就是所谓的内存泄露
也学这样做当时是不会出现问题,但是假如你的程序需要长时间运行,并且不断的new分配 了内存却没有delete,可想而知,系统最后会因为内存耗尽而挂掉。
test函数内部分配了内存,那么必须明确调用函数时必须在函数外部对这块内存进行释放
所以你锁提供的这段程序是正确的。但是要写这样的函数,这么做是很危险的,但是这么做有时候也是无可避免的,因为如果别人来调用你的函数很可能就不会再外部调用delete了,所以一定要写好注释
最后一个问题,只要明确一点,一旦程序进程结束了,那么与此进程相关的一切资源都将销毁。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.对的
2.new出来的内存不会释放
3. 对的 但是最好改成delete[] c 但是不改也不会出错
4.会的 这是操作系统的任务
2.new出来的内存不会释放
3. 对的 但是最好改成delete[] c 但是不改也不会出错
4.会的 这是操作系统的任务
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询