如何删除在函数调用C ++中作为参数传递的指针

时间:2014-04-27 22:35:08

标签: c++ pointers

编辑:我改变了示例并尝试澄清我在做什么。

我有一个递归函数,它将一个指向数组的指针作为参数,创建一个指向较小数组的指针,并调用自身,将较小的数组作为参数传递

int ListOfNumbers::recursiveQuickselect(int *array, int arrayLen){
   if(arrayLen > 10){
     int *tempArray;
     tempArray = new int[some value];

     ...edit tempArray....

     return recursiveQuickselect(tempArray, tempArrayLen);
   }
   else{
       //base case:
       sort this small array and return an element from it
   }

当我运行valgrind时,我被告知在recursiveQuickselect函数中丢失了1个块。

我在哪里删除此代码中的tempArray?

如果我在通话之前将其删除,那么我什么也没有通过该功能

我显然无法在return语句后删除它。

注意:我不能使用向量,这是一个不允许它们的学校作业。

3 个答案:

答案 0 :(得分:1)

您希望将动态大小的数组的地址传递给函数,但是 想要自动清理动态内存,因为你无法删除 记忆。像许多评论一样,这正是std::vector所做的,例如 在你的例子中

ListOfNumbers::medianOfFivePivot(int *array, int arrayLen){
   std::vector<int> tempArray(tempArrayLen);

   // ...edit tempArray....

   return getMedian(&tempArray[0], tempArrayLen);

答案 1 :(得分:0)

delete的记忆getMedian怎么样?如果getMedian是递归的,只需在基本情况下删除。

或者(@Havenard),你可以存储getMedian()的值删除内存然后返回值。

C ++提供std::vector,因此您不必处理内存管理,为什么不使用它们呢?

答案 2 :(得分:-1)

你应该能够

delete[] tempArray;

如果这不起作用,那么我真的不明白这个问题。

编辑:在返回

之前放置删除[]行