此代码是否会导致内存泄漏:
int main(){
int * a = new int[10];
int * b = new int[10];
for(int i = 0 ; i < 10; i++)
{
a[i] = 1;
b[i] = 1;
}
for(int i = 0 ; i < 10; i++)
{
a[i] = b[i]; //each a[i] is allocated 4 bytes on heap
//when we copy b[i] into a[i] do we loose
//the reference to a[i] (hence a leak),
//and replace that reference
//with a reference to a new value?
}
delete[] a;
delete[] b;
}
答案 0 :(得分:15)
不,那里没有泄漏。你只是在数组中复制值。可以把阵列想象成一个更衣室里的两排储物柜 - 你只是把一个储物柜中的东西复制到另一个储物柜的储物柜里;储物柜本身就在原地。
答案 1 :(得分:5)
[基于编辑]不,没有泄漏 - 你只是在复制值,而不是指针。像a[i]
这样的表达式意味着*(a + i)
;你正在查看(或指定)内存位置的值,而不是弄乱内存本身。
答案 2 :(得分:3)
a
和b
是int
的指针。语句a = 1;
和b = 1;
不好。您不应该将整数文字分配给指针。您的意思是a[i] = 1;
和b[i] = 1;
吗?
假设那就是你的意思那么没有,没有内存泄漏。
答案 3 :(得分:1)
这不是内存泄漏,因为你总是在a处引用堆分配的内存。然而,如果在你删除之前的某个地方你说
,那么内存泄漏会是什么a = b;
然后,你没有指向你为a分配的内存,因为a和b都指向为b分配的内存。
答案 4 :(得分:1)
没有泄漏。指针a和b指向适当数组的第一个元素,并且不更改a和b值。更有甚者,你只需要为这些数组中的元素赋值,并在最后销毁数组,所以一切看起来都不错。