繁体   English   中英

C++ 删除指向指针数组的指针而不删除内容[内存泄漏]

[英]C++ Delete Pointer to array of pointers without deleting the contents [Memory Leak]

我正在编写自己的数组排序方法,并且创建了一个重复数组来存储对象。 这些数组都是指针数组,所以我需要删除我的临时数组而不删除它指向的项目。 在下面的代码片段中,我正在泄漏内存,因为我要么删除所有项目,要么不删除任何内容。

//In constructor initialiser list
m_listArray( new PathFindingTile*[maxSize] )

void sort()
{
    auto** sorted = new PathFindingTile*[m_size];

    sorted[0] = m_listArray[0];

    for (int i = 1; i < m_size; i++)
    {
        sorted[i] = m_listArray[i];
        for (int j = i; j - 1 >= 0; j--)
        {
            if (*m_listArray[j] < *m_listArray[j - 1])
            {
                PathFindingTile* temp = sorted[j - 1];
                sorted[j - 1] = m_listArray[i];
                sorted[j] = temp;
            }
            else
            {
                sorted[i] = m_listArray[i];
                break;
            }
        }
    }

    m_listArray = sorted;

    //Both 'delete sorted' and 'delete[] sorted' delete the contents of sorted, but I'd only like to delete the array pointer
    delete sorted;
}

如何在不泄漏内存的情况下将重复的列表传输回原始列表?

 m_listArray = sorted;

在这一行,你泄漏了m_listArray在赋值之前指向的数组。

您必须在(唯一)指向它的指针被覆盖之前删除该数组。 此外, deletenew[]删除指针是错误的。 delete[]是正确的:

delete[] m_listArray;
m_listArray = sorted;

PS 将裸指针指向拥有的内存并不是一个好主意。 我建议改用std::vector 此外,不必为了排序而分配一个新数组。 您可以简单地交换数组中的元素。

我认为您只是删除指向数组中第一个元素的指针。 我相信您需要使用以下命令释放阵列。 delete[] sorted

阅读更多关于删除和删除[] [删除与删除[]] 1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM