如何删除函数返回的数组

马修·芬内尔

我是C ++的新手,并且有一个小的内存泄漏问题。程序结构非常简单,如下所示,尽管我省略了与该问题无关的部分。

int** foo(int sizeOfArray){

     int** arrayToReturn = new int*[sizeOfArray];

     for (int i = 0; i < sizeOfArray; i++) {
           arrayToReturn[i] = new int[2];
     }
     return arrayToReturn;
}

int main() {       
    a = someNumber;                // 'a' can be any value ( < 64)
    int** someArray = foo(int a);
    // Do stuff with someArray
}

因此,从本质上讲,它调用一个返回数组数组的函数。我的问题是,当我的程序数千次调用此函数时,它们会导致内存泄漏,因为自从我使用NEW以来,我需要使用delete。我只是不确定如何删除数组,因为我需要在主函数中使用它们,所以我无法在foo函数中删除它们,但是之后如何删除它们呢?我试着只是删除someArray,但是从该行用完的内存arrayToReturn[i] = new int[2]永远不会被释放。

希望这是有道理的,如果这是一个愚蠢的问题,我们深表歉意,并感谢您的阅读!

来自莫斯科的弗拉德

对于初学者,您必须按照与分配相反的顺序删除指针。

您可以编写一个可以通过以下方式完成任务的函数

void free( int **array, int sizeOfArray )
{
    for ( int i = 0; i < sizeOfArray; i++ ) 
    {
        delete [] array[i];
    }

    delete [] array;
}

或者甚至可以定义为

void free( int ** &array, int sizeOfArray )
{
    for ( int i = 0; i < sizeOfArray; i++ ) 
    {
        delete [] array[i];
    }

    delete [] array;

    array = nullptr;
}

您可以使用标std::vector头中声明的标准类来代替自己分配和释放内存<vector>

例如,您的数组可以定义为

std::vector<std::vector<int>> array( sizeOfArray, std::vector<int>( 2 ) );

在这种情况下,您不必担心释放内存。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何删除用户定义函数中的数组?

来自分类Dev

如何使用Fish Shell从函数返回数组

来自分类Dev

如何从函数返回拥有的数组?

来自分类常见问题

C ++如何从函数返回对象数组

来自分类Dev

如何让函数返回以索引0开始的数组

来自分类Dev

如何在函数中返回指针数组?

来自分类Dev

如何获取从函数中的数组返回的项目

来自分类Dev

C ++如何从函数返回对象数组

来自分类Dev

如何编写返回标头中数组的函数?

来自分类Dev

如何使用malloc()函数以返回数组?

来自分类Dev

如何从函数返回拥有的数组?

来自分类Dev

如何从OpenOffice Basic函数返回数组?

来自分类Dev

C数组和函数,如何返回?

来自分类Dev

如何从Excel中的VBA函数返回数组?

来自分类Dev

如何获取从函数中的数组返回的项目

来自分类Dev

C:如何从函数返回数字数组

来自分类Dev

如何声明返回对象数组的函数?

来自分类Dev

如何从函数返回指向数组的指针?

来自分类Dev

从函数返回动态数组后删除它

来自分类Dev

我从数组中删除偶数的函数仍返回偶数

来自分类Dev

如何通用地键入返回对象数组的值数组的函数?

来自分类Dev

从函数返回的数组的大小

来自分类Dev

定义返回数组的函数

来自分类Dev

从Bash函数返回数组

来自分类Dev

从C ++函数返回数组

来自分类Dev

从函数返回数组列表

来自分类Dev

函数返回数组PHP

来自分类Dev

返回多维数组的函数

来自分类Dev

返回数组C函数