如何删除1D数组

时间:2016-06-22 15:33:03

标签: c++

我创建一个如下所示的数组

int size = 5;
double my_arr[m_size];

for (int i = 0; i < size; i++)
{
    my_arr[i] = (rand()%10+1) +  ((double) rand() / (RAND_MAX));;
}

在对数组进行一些计算之后我想删除数组。所以我这样做

for (int i = 0; i < size; i++)
    {
       delete my_arr[i]; 
    }

我收到此错误

error: type ‘double’ argument given to ‘delete’, expected pointer

我搜索了互联网,所有解决方案都与指针数组有关。但我没有使用任何指针。那我怎么能删除这个数组呢?

2 个答案:

答案 0 :(得分:3)

当离开声明变量的范围时,将自动删除该数组。 如果你真的需要快速释放内存,你可以尝试将代码放在包含之间:

{ //create new scope
    int size = 5;
    double my_arr[m_size];

    for (int i = 0; i < size; i++)
    {
        my_arr[i] = (rand()%10+1) +  ((double) rand() / (RAND_MAX));;
    }

    //some stuff

} //all non-pointer objects (or arrays) will be deleted

或者您可以使用指针:

double *pMyarr =  new double[m_size] ;

答案 1 :(得分:0)

首先,我认为您应该考虑在程序中使用内存泄漏检测器,这样您就可以自己了解代码是否泄漏以及是否需要对其进行操作。在您的代码中,您会看到没有必要删除任何内容。 :)

据我所知,你应该只考虑两种情况下的记忆

  • 您已使用malloccalloc分配了C风格的数组。在这种情况下,您需要使用函数free来取消分配数组。但通常在C ++中,你不需要这个。您更喜欢使用std::arraystd::vector之类的容器。
  • 您已使用new创建了一个类的新实例,并且您已获得指向此实例的指针。在这种情况下,当您不再需要此实例时,必须在指针上使用delete。但通常在C ++ 11(或更高版本)中,您不希望这样。如果确实必须使用指针,您更喜欢创建一个智能指针,如std::unique_ptrstd::shared_ptr,它将为您处理内存。

使用newmalloccalloc(例如int a = 1 ;)定义变量不带时,它会超出范围时自动删除。所以你不必担心。

这是一个超出范围的变量的简单示例:

int a = 1 ;
{
    int b = 1 ;

    // b is implictly deleted here, just before the bracket.
}
a++; // It works, because a exists in this scope
b++; // It doesn't work, because b is out of scope.

// a is implicitly deleted here, assuming we are at the end of a function