Mam oto taki kawałek kodu:
//...
static const int BUTTONS_IN_ROW =4;
static const int BUTTONS_IN_COLUMN =4;
// number of pseudo random operations on children
static const unsigned int MIX_OPERATIONS = 500;
QGridLayout * m_buttonsGrid;
//...
void Przesuwanka::mixButtons()
{
//...
qDebug() << "Przed inicjalizacja zmiennych" <<endl;
int firstItemRow = 0;
int firstItemColumn = 0;
QLayoutItem * firstItem;
int secondItemRow = 0;
int secondItemColumn = 0;
QLayoutItem * secondItem;
qDebug() << "Po inicjalizacji zmiennych" << endl
<< "Przed petla do zmiany pozycji" << endl;
for(unsigned int operation =0; operation < MIX_OPERATIONS; operation++)
{
qDebug() << "Przed petla losujaca pozycje" << endl;
do
{
firstItemRow = rand() % BUTTONS_IN_ROW;
firstItemColumn = rand() % BUTTONS_IN_COLUMN;
secondItemRow = rand() % BUTTONS_IN_ROW;
secondItemColumn = rand() % BUTTONS_IN_COLUMN;
}while(secondItemRow == firstItemRow && secondItemColumn == firstItemColumn);
qDebug() << "Po petli losujacej pozycje" << endl; // !!OSTATNI KOMUNIKAT!!
qDebug() << "rowCount = " << m_buttonsGrid->rowCount() << endl; // !!!TUTAJ!!!
qDebug() << "columnCount = " << m_buttonsGrid->columnCount() << endl;
Q_ASSERT(firstItemRow < m_buttonsGrid->rowCount());
Q_ASSERT(firstItemColumn < m_buttonsGrid->columnCount());
qDebug() << "Przypisywanie do zmiennych first i second item" << endl;
firstItem = m_buttonsGrid->itemAtPosition(firstItemRow,firstItemColumn);
//...
}
To jest kawałek kodu, który chciałem zdebugować. Program dochodzi do wyświetlenia komunikatu "Po petli losujacej pozycje", a następnie dostaję komunikat, że
aplikacja niespodziewanie się zakończyła.
Po usunięciu wywołań funkcji:
qDebug() << "rowCount = " << m_buttonsGrid->rowCount() << endl;
qDebug() << "columnCount = " << m_buttonsGrid->columnCount() << endl;
nie dostaję komunikatu "przypisywanie do zmiennych...", które pojawiło by się w wyniku wykonania:
qDebug() << "Przypisywanie do zmiennych first i second item" << endl;
Tylko ten sam błąd, że aplikacja niespodziewanie się zamknęła.
Ale nie dostaję też żadnego komunikatu z assercji QT_ASSERT():
Q_ASSERT(firstItemRow < m_buttonsGrid->rowCount());
Q_ASSERT(firstItemColumn < m_buttonsGrid->columnCount());
Wygląda to tak, jakby program się psuł w funkcji rowCount, ale jest to funkcja biblioteczna, więc nie mogę jej zmienić w żaden sposób. Jest też mało prawdopodobne, żeby
naprawdę to była wina funkcji bibliotecznej, więc pewnie to ja coś napaskudziłem, ale nie mam pojęcia co to może być.
Jest to tylko kawałek programu, bo całość trochę zajmuje, jednak w razie potrzeby wkleję to, co potrzebne.
Z góry dziękuję za pomoc :)