[英]Reusing a pointer of double array without memory leak in C++ via “delete” crashes the program
[英]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
在赋值之前指向的数组。
您必须在(唯一)指向它的指针被覆盖之前删除该数组。 此外, delete
从new[]
删除指针是错误的。 delete[]
是正确的:
delete[] m_listArray;
m_listArray = sorted;
PS 将裸指针指向拥有的内存并不是一个好主意。 我建议改用std::vector
。 此外,不必为了排序而分配一个新数组。 您可以简单地交换数组中的元素。
我认为您只是删除指向数组中第一个元素的指针。 我相信您需要使用以下命令释放阵列。 delete[] sorted
阅读更多关于删除和删除[] [删除与删除[]] 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.