Witam wszyskich serdecznie. Problem polega na tym, że ten oto kawałek kodu powoduje jakiś błąd, z którym nie wiem jak sobie poradzić. SIGSEGV, chciałbym zaznaczyć, że ten błąd nie zawsze się pojawia na dodatek też nie zawsze jest błąd w tym samym miejscu. Natomiast jeśli zaremuje kod, w którym są zapisywane ustawienia do pliku poprzez zmienna "ustawienia" (brak jej deklaracji wówczas również) to wtedy błąd się nie pojawia w ogóle. Czyli doszedłem do tego, że błąd generuje zapis ustawień do pliku, natomiast nie wiem dlaczego, może jakieś pomysły. Załączam kod generujący błąd.
Jest to slot, który jest wywoływany po wciśnięciu przycisku na formie.
void programowanie::on_komora_rozpocznij_suszenie_clicked()
{
ui->komora_zakoncz_suszenie->setEnabled(true);
ui->komora_rozpocznij_suszenie->setEnabled(false);
ui->sonda1_k1->setChecked(true); //wlaczenie wszystkich wentylatorow i sond
ui->sonda2_k1->setChecked(true);
ui->sonda3_k1->setChecked(true);
ui->sonda4_k1->setChecked(true);
ui->sonda5_k1->setChecked(true);
ui->wentylator1_k1->setChecked(true);
ui->wentylator2_k1->setChecked(true);
ui->wentylator3_k1->setChecked(true);
ui->wentylator4_k1->setChecked(true);
zapiszStanyKontrolek(m_ostatnia_suszarnia);
nastawy_komora *tablica_nastawy = ((MainWindow*)parent())->tablica_nastawy;
//zapiszUstawienia();
QSettings *ustawienia = new QSettings(QApplication::applicationDirPath() + tr("\\konfiguracja.ini"), QSettings::IniFormat);
for(int i = 0; i < 24; i++)
{
QString suszarnia = QString("Suszarnia") + QString("%1").arg(i+1);
tablica_nastawy[i].suszenie_status = ustawienia->value(suszarnia + tr("/stan_pracy_komory"), 0).toInt();
tablica_nastawy[i].jakie_suszenie = ustawienia->value(suszarnia + tr("/rodzaj_suszenia"), 0).toInt();
tablica_nastawy[i].jakie_drewno = ustawienia->value(suszarnia + tr("/rodzaj_drewna"), 0).toInt();
tablica_nastawy[i].wilgotnosc_koncowa = ustawienia->value(suszarnia + tr("/wilgotnosc_koncowa_drewna"), 0).toInt();
tablica_nastawy[i].jaka_grubosc = ustawienia->value(suszarnia + tr("/grubosc_drewna"), 0).toInt();
tablica_nastawy[i].nawilzanie_praca = ustawienia->value(suszarnia + tr("/czas_nawilzania"), 0).toInt() > 0 ? 1 : 0;
tablica_nastawy[i].nawilzanie_przerwa = ustawienia->value(suszarnia + tr("/czas_przerwy"), 0).toInt();
tablica_nastawy[i].obroty_prawe= ustawienia->value(suszarnia + tr("/obroty_prawe"), 0).toInt();
tablica_nastawy[i].obroty_lewe = ustawienia->value(suszarnia + tr("/obroty_lewe", 0)).toInt();
tablica_nastawy[i].przewietrzanie_praca = ustawienia->value(suszarnia + tr("/czas_wietrzenia"), 0).toInt();
tablica_nastawy[i].przewietrzanie_przerwa = ustawienia->value(suszarnia + tr("/cykl_wietrzenia"), 0).toInt();
tablica_nastawy[i].kominki_min = ustawienia->value(suszarnia + tr("/kominki_min"), 0).toInt();
tablica_nastawy[i].kominki_max = ustawienia->value(suszarnia + tr("/kominki_max"), 0).toInt();
tablica_nastawy[i].roznica_wilgotnosci = ustawienia->value(suszarnia + tr("/roznica_wilgotnosci"), 0).toInt();
tablica_nastawy[i].zawor_min = ustawienia->value(suszarnia + tr("/zawor_min"), 0).toInt();
tablica_nastawy[i].zawor_max = ustawienia->value(suszarnia + tr("/zawor_max"), 0).toInt();
tablica_nastawy[i].roznica_temperatury = ustawienia->value(suszarnia + tr("/roznica_temperatury"), 0).toInt();
tablica_nastawy[i].wentylatory_status = 0;
tablica_nastawy[i].wentylatory_status |= ustawienia->value(suszarnia + tr("/wentylator1"), 0).toInt() > 0 ? 0x01 : 0;
tablica_nastawy[i].wentylatory_status |= ustawienia->value(suszarnia + tr("/wentylator2"), 0).toInt() > 0 ? 0x02 : 0;
tablica_nastawy[i].wentylatory_status |= ustawienia->value(suszarnia + tr("/wentylator3"), 0).toInt() > 0 ? 0x04 : 0;
tablica_nastawy[i].wentylatory_status |= ustawienia->value(suszarnia + tr("/wentylator4"), 0).toInt() > 0 ? 0x08 : 0;
tablica_nastawy[i].sondy_status = 0;
tablica_nastawy[i].sondy_status |= ustawienia->value(suszarnia + tr("/sonda1"), 0).toInt() > 0 ? 0x01 : 0;
tablica_nastawy[i].sondy_status |= ustawienia->value(suszarnia + tr("/sonda2"), 0).toInt() > 0 ? 0x02 : 0;
tablica_nastawy[i].sondy_status |= ustawienia->value(suszarnia + tr("/sonda3"), 0).toInt() > 0 ? 0x04 : 0;
tablica_nastawy[i].sondy_status |= ustawienia->value(suszarnia + tr("/sonda4"), 0).toInt() > 0 ? 0x08 : 0;
tablica_nastawy[i].sondy_status |= ustawienia->value(suszarnia + tr("/sonda5"), 0).toInt() > 0 ? 0x10 : 0;
QString nazwa = ustawienia->value(suszarnia + tr("/opis_suszarni"), tr("")).toString();
tablica_nastawy[i].zegar1=0;
tablica_nastawy[i].zegar1_status=0;
tablica_nastawy[i].zegar2=0;
tablica_nastawy[i].zegar2_status=0;
for(int k = 0; k < 255; k++)
tablica_nastawy[i].opis_suszarni[k] = 0;
for(int j = 0; j < nazwa.length(); j++)
{
tablica_nastawy[i].opis_suszarni[j] = nazwa[j].toAscii();
}
//data_suszenia
nazwa = ustawienia->value(suszarnia + tr("/data_suszenia"), tr("")).toString();
for(int k = 0; k < 255; k++)
tablica_nastawy[i].data_suszenia[k] = 0;
for(int j = 0; j < nazwa.length(); j++)
{
tablica_nastawy[i].data_suszenia[j] = nazwa[j].toAscii();
}
}
((MainWindow*)parent())->tablica_nastawy[m_ostatnia_suszarnia-1].suszenie_status = status_ready;
QString filename = ((MainWindow*)parent())->getFileName(m_ostatnia_suszarnia, QString::fromAscii(tablica_nastawy[m_ostatnia_suszarnia-1].opis_suszarni), false, true);
QString suszarnia2 = tr("Suszarnia") + QString("%1").arg(m_ostatnia_suszarnia);
ustawienia->setValue(suszarnia2 + tr("/nazwa_pliku"), filename);
QString data = QDateTime::currentDateTime().toString(tr("yyyy-dd-MM hh:mm:ss"));
ustawienia->setValue(suszarnia2 + tr("/data_suszenia"), data);
ustawienia->sync();
}
Tutaj funkcja z okna głównego
QString MainWindow::getFileName(int nr_device, QString description, bool bBinary, bool bNew)
{
QString filename;
if(bNew)
{
QDate date = QDate::currentDate();
QString sNrDevice;
sNrDevice.sprintf("%i", nr_device);
if(bBinary)
{
filename = date.toString(tr("ddMMyyyy")) + tr("_") + sNrDevice + tr("_") + description;// + ".wb";
}
else
{
filename = date.toString(tr("ddMMyyyy")) + tr("_") + sNrDevice + tr("_") + description;// + ".csv";
//zapis nazwy pliku do struktury komory
}
}
else
{
QSettings ustawienia(QApplication::applicationDirPath() + tr("\\konfiguracja.ini"), QSettings::IniFormat, this);
QString suszarnia = QString("Suszarnia") + QString("%1").arg(nr_device);
filename = ustawienia.value(suszarnia + tr("/nazwa_pliku")).toString();
}
return filename;
}