【发布时间】:2013-11-26 16:10:14
【问题描述】:
我的程序崩溃并引发内存堆损坏错误。 有问题的代码块在下面描述 - 问题出现在“delete [] p;”波纹管 此块代码的目的是调整数组的大小(项目 - 在类头中定义) 为了做到这一点, 1.我分配了一个新的数组(副本),具有新的适当容量。 2. 我将旧数组(项目)复制到新的(调整大小的)数组“副本”中。 3.然后我尝试删除副本,因为我不再需要它了 我肯定在最后一点做错了。 如何正确地做到这一点? - 表示如何正确释放“复制”处理的内存 避免内存泄漏?
template <class Item> void MinPQ<Item>::resize(int capacity)
{
Item *copy = new Item[capacity];//capacity = stack size
for(int i = 0; i < N; ++i)
{
copy[i] = items[i];
}
Item *p = items;
items = copy;
delete[] p;
p = NULL;//avoid dangling pointer
}
Item 在类中定义如下:
template <class Item> class MinPQ
{
private:
Item *items;
int queueSize;
int N;
void resize(int capacity);
bool greater(int i, int j);
void exch(int i, int j);
void swim(int k);
void sink(int k);
public:
MinPQ();
~MinPQ();
void insert(Item item);
Item delMin();
void print();
inline int size(){return N;}
inline bool isEmpty(){return N == 1;}
};
构造函数和析构函数定义如下:
template <class Item> MinPQ<Item>::MinPQ()
{
queueSize = 2;
N = 0;
items = new Item[queueSize];
}
template <class Item> MinPQ<Item>::~MinPQ()
{
delete [] items;
items = NULL;
}
【问题讨论】:
-
1.你的班级似乎违反了三人制。 2. 只需使用
std::array或std::vector。 -
您忘记向我们提供实际调用您在此处显示的函数的代码。但是,如果
queuesize符合我的想法,您应该在该函数中将其设置为capacity。
标签: c++