Вы читаете из неинициализированных переменных-членов в конструкторе копирования:
DynamicVector(const DynamicVector &another)
{
if (mallocSize < another.numofItems)
{
if (array)
{
delete[] array;
array = NULL;
}
array = new T[another.mallocSize];
}
...
Здесь члены mallocSize
и array
не инициализированы и содержат случайный мусор, поэтому проверки могут делать что угодно. У вас есть три сенара ios.
mallocSize
случайно мало, поэтому:
array
не инициализируется и указывает на случайную память.
Таким образом, строка 91 вызовет sigfault когда в конечном итоге вызывается. mallocSize
является произвольно большим, а array
не является нулевым.
Вы вызываете delete
на случайное значение, таким образом разрушая вашу память. Либо вызывает segfault, либо вызывает беспорядок в памяти, поэтому строка 91. mallocSize
имеет случайный размер, а array
- случайное значение null.
Это работает (вероятность 1 из трех).
Должно быть просто
DynamicVector(const DynamicVector &another)
{
array = new T[another.mallocSize];
...
Кроме того, везде в коде вы можете писать array[i]
вместо *(array + i)
, например array[i] = another.array[i]
вместо *(array + i) = *(another.array + i)
.
PS. Как только он заработает, проверьте его код.
https://codereview.stackexchange.com/