【问题标题】:Does copying the content of one array to another cause a memory leak将一个数组的内容复制到另一个数组会导致内存泄漏吗
【发布时间】:2009-10-16 18:34:14
【问题描述】:

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

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;


}

【问题讨论】:

    标签: c++ memory memory-leaks


    【解决方案1】:

    不,那里没有泄漏。您只是在数组中复制值。将阵列想象成更衣室里的两排储物柜——你只是复制一个储物柜里的东西,然后把它放在另一排的储物柜里;储物柜本身就在原处。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        ab 是指向 int 的指针。 a = 1;b = 1; 的声明很糟糕。您不应该将整数文字分配给指针。你的意思是a[i] = 1;b[i] = 1;

        假设这就是你的意思,那么不,没有内存泄漏。

        【讨论】:

          【解决方案4】:

          这不是内存泄漏,因为您总是在 a 处引用堆分配的内存。但是,如果在删除之前的某个地方,您说的是内存泄漏

          a = b;
          

          那么,你没有任何东西指向你为 a 分配的内存,因为 a 和 b 都指向了为 b 分配的内存。

          【讨论】:

            【解决方案5】:

            没有泄漏。指针 a 和 b 指向适当数组的第一个元素,您不要更改 a 和 b 值。更重要的是,您只需为这些数组中的元素赋值并在最后销毁数组,所以一切看起来都很好。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2023-03-22
              • 2021-09-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多