【发布时间】:2019-07-17 03:39:10
【问题描述】:
考虑一下 C++ 中的代码 sn-p:
int *foo() {
int *y = new int[1000];
return y;
}
int main() {
int *x = new int [1000];
x = foo();
delete[] x;
return 0;
}
当x 被创建时,它指向一个内存地址。当foo() 被调用时,一个新的指针y 被创建,指向一个不同的地址,但是x 被设置为y 拥有的地址。因此,当它被删除时,新地址的内存被释放,但x 拥有的原始地址被泄露。对吗?
此外,我在调用foo() 之前调用delete[] x 对sn-p 进行了轻微更改,它仍然编译并运行:
int *foo() {
int *y = new int[1000];
return y;
}
int main() {
int *x = new int [1000];
delete[] x;
x = foo();
delete[] x;
return 0;
}
这是否意味着我阻止了泄漏?最后一个问题,如果我在声明x时没有初始化它,但又不提前删除它,是不是指向了会被泄露的内存?如下:
int *foo() {
int *y = new int[1000];
return y;
}
int main() {
int *x;
x = foo();
delete[] x;
return 0;
}
作为旁注,我知道使用向量和/或唯一指针更安全,但我对上面代码的功能感到好奇,特别是当指针被声明但稍后初始化时会发生什么。
【问题讨论】:
-
格式正确的问题;谢谢!
标签: c++ pointers memory-management memory-leaks