Намерих, къде е бъга! copyQueue e дефинирана по следния начин:
void copyQueue(LQueue const& q) {
if (q.empty())
return;
push(q.front->inf);
elem *toCopy = q.front->link;
while (toCopy != NULL) {
push(toCopy->inf);
toCopy = toCopy->link;
}
}
Kато сложих едно cout << "Empty!!! << endl; в if(empty()) условието на push функцията, което би трябвало да се принтира само когато опашката е празна, забелязах че то се принтира само когато добавям първоначално елементи в опашката, но не и когато опашката се копира с копи конструктора. Т. е излиза, че тогава функцията empty() връща false, т.е член данната front != NULL. Това ме накара да се замисля над това какво се случва, когато се извиква копи конструктора, а именно че както при нормалния конструктор, член данните на класа не са инициализирани, но push функцията, извикана в тялото на copyQueue, очаква те да са правилно инициализирани, все пак пушваме елементи, само когато опашката е вече създадена. НО инициализация на front в copyQueue не се прави и затова стойността и в началото на копирането е неопределена. При мен при всяко пускане на програмата беше false(явно в моята версия на gcc, това е така по подразбиране или просто съм имал рядкото щастие в паметта там да си е имало нула от преди) :)
Фикса за бъга е много прост - добавете ": front(NULL), back(NULL)" като инициализационен списък за копи коструктура.