将一个数组的内容复制到另一个数组会导致内存泄漏

时间:2009-10-16 18:34:14

标签: c++ memory memory-leaks

此代码是否会导致内存泄漏:

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;


}

5 个答案:

答案 0 :(得分:15)

不,那里没有泄漏。你只是在数组中复制值。可以把阵列想象成一个更衣室里的两排储物柜 - 你只是把一个储物柜中的东西复制到另一个储物柜的储物柜里;储物柜本身就在原地。

答案 1 :(得分:5)

[基于编辑]不,没有泄漏 - 你只是在复制值,而不是指针。像a[i]这样的表达式意味着*(a + i);你正在查看(或指定)内存位置的值,而不是弄乱内存本身。

答案 2 :(得分:3)

abint的指针。语句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值。更有甚者,你只需要为这些数组中的元素赋值,并在最后销毁数组,所以一切看起来都不错。