Я просто не понимаю, что такое динамический массив с классом контейнера. Вот пример того, как я это делаю.
Класс контейнера:
class Container{
private:
int n, current;
Class *C;
public:
Container(): C(NULL), n(0), current(0){}
void expandC(int ammount){
Class *NewClass= new Class[ammount];
for (int i = 0; i < n; i++)
NewClass[i] = C[i];
delete []C;
C = NewClass;
n = ammount;
}
};
Почему яполучить ошибку в строке delete[] C
?
РЕДАКТИРОВАТЬ: Если поймано суть правила трех, это означает, что вы должны определить конструктор копирования оператор присваивания или деструктор.В моем случае наиболее важным, вероятно, является конструктор копирования.Вот как я понял, как они должны быть определены в моем случае:
Container(): C(NULL), n(0), current(0){}
Container(int N, vector<string> a){
C = new Class[N];
for(int i = 0; i<n; i++){C->setA(a[i]);}
n=N;
}
~Container(){ delete [] C;}
Это хорошая практика, и я собираюсь использовать ее в будущем, но в этом случае она мне не помогла.
Я отметил в комментариях, что моя ошибка связана с нарушением прав доступа. Я размещаю ее здесь на всякий случай.
Unhandled exception at 0x53f0edfc (msvcr90d.dll) in dinamicTest.exe: 0xC0000005: Access violation writing location 0xabababab.
Вот запрашиваемая начальная полная версия этой программы http://pastebin.com/djTz36Tu