내 프로그램에서 메모리 힙 손상 오류가 발생하여 충돌합니다. 문제가되는 코드 블록은 다음과 같습니다. "delete [] p;"에 문제가 나타납니다. 코드 블록 이 블록 코드의 목적은 배열 (항목 - 클래스 헤더에 정의 된 항목)의 크기를 조정하는 것입니다. 이렇게하려면 1. 새로운 적절한 용량의 새 배열 (복사본)을 할당합니다. 2. 이전 배열 (항목)을 새로운 (크기 조정 된) 배열 "복사"로 복사합니다. 3. 이제 더 이상 필요 없기 때문에 복사본을 삭제하려고합니다. 마지막 지점에서 확실히 오류가 발생합니다. 올바르게 수행하는 방법은 무엇입니까? - "복사"가 올바르게 처리하는 메모리를 해제하는 방법을 의미합니다. 메모리 누수 방지? 생성자와 소멸자를 넣고 정의복사 후 동적 배열 삭제
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> 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
}
항목은 다음과 같이 클래스에 정의 귀하의 문제 때문에 당신이하지 않은 사실 가능성이
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. 수업이 3 규칙을 위반 한 것으로 보입니다. 2.'std :: array' 또는'std :: vector'를 사용하십시오. –
여기에 표시되는 기능을 실제로 * 호출하는 코드를 제공하는 것을 잊었습니다. 그러나,'queuesize'가 내가하는 일을한다고 생각한다면, 당신은 그 함수에서'capacity'로 설정해야합니다. –