Redian新闻
>
一个interview问题,关于内存泄漏
avatar
一个interview问题,关于内存泄漏# Programming - 葵花宝典
D*a
1
假设有个class B,一个function A()
A() {
B* b=new B();
.....
//到结束都没有delete b
}
问如果A正常执行,这样会不会内存泄漏。我说会,因为内存分配了没有delete,
但是interviewer说不会,因为b在A()结束之后就out of scope了,compiler会自动
delete b。
请问是这样的么?感觉没什么道理啊
avatar
r*r
2
这个interviewer当初怎么拿到offer的

【在 D*******a 的大作中提到】
: 假设有个class B,一个function A()
: A() {
: B* b=new B();
: .....
: //到结束都没有delete b
: }
: 问如果A正常执行,这样会不会内存泄漏。我说会,因为内存分配了没有delete,
: 但是interviewer说不会,因为b在A()结束之后就out of scope了,compiler会自动
: delete b。
: 请问是这样的么?感觉没什么道理啊

avatar
s*u
3
有才 -.-

【在 D*******a 的大作中提到】
: 假设有个class B,一个function A()
: A() {
: B* b=new B();
: .....
: //到结束都没有delete b
: }
: 问如果A正常执行,这样会不会内存泄漏。我说会,因为内存分配了没有delete,
: 但是interviewer说不会,因为b在A()结束之后就out of scope了,compiler会自动
: delete b。
: 请问是这样的么?感觉没什么道理啊

avatar
P*e
4
如果是java,他说的没错
如果是c/c++, 也不一定错,因为他可能说很多SDE 有memory collector
感觉他就是个外行,还compiler呢,allocate memory is run time process ( post
compilation)

【在 D*******a 的大作中提到】
: 假设有个class B,一个function A()
: A() {
: B* b=new B();
: .....
: //到结束都没有delete b
: }
: 问如果A正常执行,这样会不会内存泄漏。我说会,因为内存分配了没有delete,
: 但是interviewer说不会,因为b在A()结束之后就out of scope了,compiler会自动
: delete b。
: 请问是这样的么?感觉没什么道理啊

avatar
s*u
5
java好像没有星星啊

【在 P********e 的大作中提到】
: 如果是java,他说的没错
: 如果是c/c++, 也不一定错,因为他可能说很多SDE 有memory collector
: 感觉他就是个外行,还compiler呢,allocate memory is run time process ( post
: compilation)

avatar
P*e
6
sorry la
我当作数组了

【在 s****u 的大作中提到】
: java好像没有星星啊
avatar
R*N
7
Allocate究竟做些什么呢?
MMU的对应指令是啥?

【在 P********e 的大作中提到】
: 如果是java,他说的没错
: 如果是c/c++, 也不一定错,因为他可能说很多SDE 有memory collector
: 感觉他就是个外行,还compiler呢,allocate memory is run time process ( post
: compilation)

avatar
w*w
8
你这个理由不能说明他是外行。
反正生命周期就一个函数,写个编译器能发现这种变量也不是难事。

【在 P********e 的大作中提到】
: 如果是java,他说的没错
: 如果是c/c++, 也不一定错,因为他可能说很多SDE 有memory collector
: 感觉他就是个外行,还compiler呢,allocate memory is run time process ( post
: compilation)

avatar
S*n
9
using smartptr sometimes helps.

【在 P********e 的大作中提到】
: 如果是java,他说的没错
: 如果是c/c++, 也不一定错,因为他可能说很多SDE 有memory collector
: 感觉他就是个外行,还compiler呢,allocate memory is run time process ( post
: compilation)

avatar
R*Z
10
说new不用delete的还不外行? ...如果这真是他的原话
在一个函数里new后不delete是正常现象啊, 因为程序需要在其他函数里delete

【在 w********w 的大作中提到】
: 你这个理由不能说明他是外行。
: 反正生命周期就一个函数,写个编译器能发现这种变量也不是难事。

avatar
p*n
11
以下几种情况呢?
1)
void main() {
B* b=new B();
.....
//到结束都没有delete b
}
2)
A() {
int pid = fork();
if(pid != 0) {
pid = wait(&status);
// do something;
}
else {
B* b=new B();
//到结束都没有delete b
_exit(0);
}
}
专家给说道说道

【在 D*******a 的大作中提到】
: 假设有个class B,一个function A()
: A() {
: B* b=new B();
: .....
: //到结束都没有delete b
: }
: 问如果A正常执行,这样会不会内存泄漏。我说会,因为内存分配了没有delete,
: 但是interviewer说不会,因为b在A()结束之后就out of scope了,compiler会自动
: delete b。
: 请问是这样的么?感觉没什么道理啊

avatar
c*g
12
分配了内存资源但不释放的行为是memory leak
但不是说程序必然有问题,你举的例子,因为heap是随着process分配的,
当process terminate之后,这些资源也会自动释放。

【在 p****n 的大作中提到】
: 以下几种情况呢?
: 1)
: void main() {
: B* b=new B();
: .....
: //到结束都没有delete b
: }
: 2)
: A() {
: int pid = fork();

avatar
p*n
13
以上两种情况是一样的吗?

【在 c*****g 的大作中提到】
: 分配了内存资源但不释放的行为是memory leak
: 但不是说程序必然有问题,你举的例子,因为heap是随着process分配的,
: 当process terminate之后,这些资源也会自动释放。

avatar
c*g
14
yes, but it depends on how many times A() is called, i.e. fork bomb

【在 p****n 的大作中提到】
: 以上两种情况是一样的吗?
avatar
t*t
15
通常memory leak不是这样说的
分配了内存,不释放,而且把分配的那个指针给丢了,这样叫做memory leak

【在 c*****g 的大作中提到】
: 分配了内存资源但不释放的行为是memory leak
: 但不是说程序必然有问题,你举的例子,因为heap是随着process分配的,
: 当process terminate之后,这些资源也会自动释放。

avatar
c*g
16
sgi definition:
memory leak
Making malloc calls without the corresponding calls to free. The result
is that the amount of heap memory used continues to increase as the process
runs.
pcmag defintition:
When memory is allocated, but not deallocated, a memory leak occurs (the
memory has leaked out of the computer).
这些是通常的定义,当然本来就没啥标准定义。

【在 t****t 的大作中提到】
: 通常memory leak不是这样说的
: 分配了内存,不释放,而且把分配的那个指针给丢了,这样叫做memory leak

avatar
d*d
17
ft,你太倒霉了.

【在 D*******a 的大作中提到】
: 假设有个class B,一个function A()
: A() {
: B* b=new B();
: .....
: //到结束都没有delete b
: }
: 问如果A正常执行,这样会不会内存泄漏。我说会,因为内存分配了没有delete,
: 但是interviewer说不会,因为b在A()结束之后就out of scope了,compiler会自动
: delete b。
: 请问是这样的么?感觉没什么道理啊

avatar
t*e
18
This interviewer should be fired.
avatar
j*e
19
这个取决于操作系统,虽然大多数操作系统会自动释放资源,但也有一些变态的,只有重
启才会释放资源.所以一定要在程序里释放内存

【在 c*****g 的大作中提到】
: 分配了内存资源但不释放的行为是memory leak
: 但不是说程序必然有问题,你举的例子,因为heap是随着process分配的,
: 当process terminate之后,这些资源也会自动释放。

avatar
c*x
20
OF COURSE this is a memory leak. When function A runs out of scope,
the function stack gets unwind, the pointer b and its value get lose, the
interviewer is a jerk.
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。