我创建一个如下所示的数组
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
我搜索了互联网,所有解决方案都与指针数组有关。但我没有使用任何指针。那我怎么能删除这个数组呢?
答案 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)
首先,我认为您应该考虑在程序中使用内存泄漏检测器,这样您就可以自己了解代码是否泄漏以及是否需要对其进行操作。在您的代码中,您会看到没有必要删除任何内容。 :)
据我所知,你应该只考虑两种情况下的记忆:
malloc
或calloc
分配了C风格的数组。在这种情况下,您需要使用函数free
来取消分配数组。但通常在C ++中,你不需要这个。您更喜欢使用std::array
或std::vector
之类的容器。new
创建了一个类的新实例,并且您已获得指向此实例的指针。在这种情况下,当您不再需要此实例时,必须在指针上使用delete
。但通常在C ++ 11(或更高版本)中,您不希望这样。如果确实必须使用指针,您更喜欢创建一个智能指针,如std::unique_ptr
或std::shared_ptr
,它将为您处理内存。使用new
,malloc
或calloc
(例如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