D*******a 发帖数: 3688 | 1 假设有个class B,一个function A()
A() {
B* b=new B();
.....
//到结束都没有delete b
}
问如果A正常执行,这样会不会内存泄漏。我说会,因为内存分配了没有delete,
但是interviewer说不会,因为b在A()结束之后就out of scope了,compiler会自动
delete b。
请问是这样的么?感觉没什么道理啊 |
r****r 发帖数: 115 | 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。 : 请问是这样的么?感觉没什么道理啊
|
s****u 发帖数: 118 | 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。 : 请问是这样的么?感觉没什么道理啊
|
P********e 发帖数: 2610 | 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。 : 请问是这样的么?感觉没什么道理啊
|
s****u 发帖数: 118 | 5 java好像没有星星啊
【在 P********e 的大作中提到】 : 如果是java,他说的没错 : 如果是c/c++, 也不一定错,因为他可能说很多SDE 有memory collector : 感觉他就是个外行,还compiler呢,allocate memory is run time process ( post : compilation)
|
P********e 发帖数: 2610 | 6 sorry la
我当作数组了
【在 s****u 的大作中提到】 : java好像没有星星啊
|
R*******N 发帖数: 7494 | 7 Allocate究竟做些什么呢?
MMU的对应指令是啥?
【在 P********e 的大作中提到】 : 如果是java,他说的没错 : 如果是c/c++, 也不一定错,因为他可能说很多SDE 有memory collector : 感觉他就是个外行,还compiler呢,allocate memory is run time process ( post : compilation)
|
w********w 发帖数: 4 | 8 你这个理由不能说明他是外行。
反正生命周期就一个函数,写个编译器能发现这种变量也不是难事。
【在 P********e 的大作中提到】 : 如果是java,他说的没错 : 如果是c/c++, 也不一定错,因为他可能说很多SDE 有memory collector : 感觉他就是个外行,还compiler呢,allocate memory is run time process ( post : compilation)
|
S*****n 发帖数: 227 | 9 using smartptr sometimes helps.
【在 P********e 的大作中提到】 : 如果是java,他说的没错 : 如果是c/c++, 也不一定错,因为他可能说很多SDE 有memory collector : 感觉他就是个外行,还compiler呢,allocate memory is run time process ( post : compilation)
|
R***Z 发帖数: 1167 | 10 说new不用delete的还不外行? ...如果这真是他的原话
在一个函数里new后不delete是正常现象啊, 因为程序需要在其他函数里delete
【在 w********w 的大作中提到】 : 你这个理由不能说明他是外行。 : 反正生命周期就一个函数,写个编译器能发现这种变量也不是难事。
|
|
|
p****n 发帖数: 148 | 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。 : 请问是这样的么?感觉没什么道理啊
|
c*****g 发帖数: 119 | 12 分配了内存资源但不释放的行为是memory leak
但不是说程序必然有问题,你举的例子,因为heap是随着process分配的,
当process terminate之后,这些资源也会自动释放。
【在 p****n 的大作中提到】 : 以下几种情况呢? : 1) : void main() { : B* b=new B(); : ..... : //到结束都没有delete b : } : 2) : A() { : int pid = fork();
|
p****n 发帖数: 148 | 13 以上两种情况是一样的吗?
【在 c*****g 的大作中提到】 : 分配了内存资源但不释放的行为是memory leak : 但不是说程序必然有问题,你举的例子,因为heap是随着process分配的, : 当process terminate之后,这些资源也会自动释放。
|
c*****g 发帖数: 119 | 14 yes, but it depends on how many times A() is called, i.e. fork bomb
【在 p****n 的大作中提到】 : 以上两种情况是一样的吗?
|
t****t 发帖数: 6806 | 15 通常memory leak不是这样说的
分配了内存,不释放,而且把分配的那个指针给丢了,这样叫做memory leak
【在 c*****g 的大作中提到】 : 分配了内存资源但不释放的行为是memory leak : 但不是说程序必然有问题,你举的例子,因为heap是随着process分配的, : 当process terminate之后,这些资源也会自动释放。
|
c*****g 发帖数: 119 | 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
|
d*******d 发帖数: 2050 | 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。 : 请问是这样的么?感觉没什么道理啊
|
t********e 发帖数: 880 | 18 This interviewer should be fired. |
j********e 发帖数: 240 | 19 这个取决于操作系统,虽然大多数操作系统会自动释放资源,但也有一些变态的,只有重
启才会释放资源.所以一定要在程序里释放内存
【在 c*****g 的大作中提到】 : 分配了内存资源但不释放的行为是memory leak : 但不是说程序必然有问题,你举的例子,因为heap是随着process分配的, : 当process terminate之后,这些资源也会自动释放。
|
c********x 发帖数: 84 | 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. |