При тестировании моего кода я постоянно получаю ошибки в отношении использования delete в качестве состояний тестового объекта моего класса, которые вызывают удаление из массива, выделенного с помощью нового []. Я удаляю в своих ~ IntVector и две функции расширения с функциями расширения, расширяющими емкость при перераспределении памяти для динамически распределенного массива.Неправильное выделение памяти?
Как правильно использовать удаление, чтобы предотвратить утечку памяти и устранить эту ошибку?
основной файл
#include "IntVector.h"
#include <iostream>
#include <vector>
using namespace std;
IntVector::~IntVector(){
delete[] data;
}
void IntVector::expand(){
cap = cap * 2;
int *data2 = data;
data = new int[cap];
data = data2;
delete data2;
delete[] data2;
}
void IntVector::expand(unsigned amount){
cap = amount;
int *data2 = data;
data = new int[cap];
data = data2;
delete data2;
delete[] data2;
}
Заголовок
#ifndef INTVECTOR_H
#define INTVECTOR_H
using namespace std;
class IntVector{
private:
unsigned sz;
unsigned cap;
int *data;
private:
void expand();
void expand(unsigned amount);
};
#endif
Мой деструктор ~ IntVector. – user3314899
Вы отправили много кода, очень сложно пропустить такую небольшую функцию во всей этой стене кода. Вы можете прочитать [контрольный список вопросов переполнения стека] (http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist). Вы также можете узнать, что такое [SSCCE] (http://sscce.org/). –
@ user3314899 - Сразу же программа 2-строчной основной() может сделать ваш класс падающим на его лице: 'int main() {IntVector a (10); IntVector b = a;} ' - это все, что вам нужно - у вас есть ошибка с двойным удалением в конце main(). Если я добавлю еще две строки, я могу воспроизвести утечку памяти. Прочитайте правило трех, так как другие предложили преодолеть эту ошибку. – PaulMcKenzie