Если честно, вам отчасти повезло array
было нулевым. Это могло быть что угодно вплоть до дома бабушки, потому что вы забыли инициализировать его и указать на действительный экземпляр boolArray
.
boolArray* array; // uninitialized pointer
int len;//new array length
cout << "enter size of array " << endl;
cin >> len;
array->changeLength(len); // Crom only knows what array points at.
Самое прямое решение - вообще не использовать указатель
boolArray array; // no need for a pointer here
int len;//new array length
cout << "enter size of array " << endl;
cin >> len;
array.changeLength(len);
, но я бы предпочел
int len;//new array length
cout << "enter size of array " << endl;
cin >> len;
boolArray array(len); // no need to resize.
Тогда вам нужно go Исправить ошибку, которую выделил Дэвид Шварц - Это намного, намного противнее - и вот это:
boolArray::boolArray(int len)
{//ctor with parameter
if (validIndex(len)) //there is no length to validate against.
// It hasn't been set yet.
intialize(len); // length isn't set until in here
}
Проверка длины доступа к массиву перед созданием массива бесполезна, поэтому я бы просто удалите его.
boolArray::boolArray(int len)
{//ctor with parameter
intialize(len);
}
И предупреждение: этот класс не соблюдает Правило трех и не может быть безопасно скопирован.