Witam.
Mam problem z pewnym kodem.
QString nazwaplikuzurl(QString Url)
{
std::string path = Url.toStdString();
std::string filename;
size_t pos = path.find_last_of("//");
if(pos != std::string::npos)
filename.assign(path.begin() + pos + 1, path.end());
else
filename = path;
return filename.c_str();
}
double zaokraglijrozmiar(double bajty)
{
if (bajty < 1024)
{
//to pozostaw bity
} else if (bajty < 1024*1024) {
bajty /= 1024;
//na kb
} else {
bajty /= 1024*1024;
//na mb
}
QString numer = QString::number(bajty, 'f', 2);//zwroc cyfre do 2 po przecinku
return numer.toDouble();
}
QString zaokraglijjednostke(double bajty)
{
QString Zaokraglijjednostke;
if (bajty < 1024) {
Zaokraglijjednostke = "b";
} else if (bajty < 1024*1024) {
bajty /= 1024;
Zaokraglijjednostke = "KB";
} else {
bajty /= 1024*1024;
Zaokraglijjednostke = "MB";
}
return Zaokraglijjednostke;
}
....
//OD TERAZ WKLEJAJĄC KOD Z DOŁU WYSTĘPUJE PROBLEM
ui->progressBar->setValue(percentage);
QString link= ui->lineEdit->text();
QString cel = ui->lineEdit_2->text() + "\\" + nazwaplikuzurl(link);
downloadTime = (clock() - czasStart - czasCzekanie)/1000;
double predkoscsrednia = bytesTotal/downloadTime;
double predkoscpobierania = bytesReceived / downloadTime;
double pozostaloSekund = ((bytesReceived - bytesTotal) / predkoscpobierania);
double szacowanyczaspobierania = bytesTotal/predkoscpobierania;
QString textNazwaPliku = QString( "Nazwa pliku: %1" )
.arg(nazwaplikuzurl(link));
QString textZrodlo = QString( "Źródło: %1" )
.arg(link);
QString textCel = QString( "Cel: %1" )
.arg(cel);
QString textPredkoscPobierania = QString( "Prędkość pobierania: %1 %2\\s (średnio %3 %4\\s)")
.arg(zaokraglijrozmiar(predkoscpobierania))
.arg(zaokraglijjednostke(predkoscpobierania))
.arg(zaokraglijrozmiar(predkoscsrednia))
.arg(zaokraglijjednostke(predkoscsrednia));
QString textRozmiarPobieranegoPliku = QString( "Rozmiar pliku: %1 %2 (%3 bajtów)")
.arg(zaokraglijrozmiar(bytesTotal))
.arg(zaokraglijjednostke(bytesTotal))
.arg(bytesTotal);
QString textPobrano = QString( "Pobrano: %1 %2 (%3 bajtów)")
.arg(zaokraglijrozmiar(bytesReceived))
.arg(zaokraglijjednostke(bytesReceived))
.arg(bytesReceived);
QString textUplyneloSekund = QString( "Upłynęło: %1 sekund")
.arg(downloadTime);
QString textPozostaloSekund = QString( "Pozostało: %1 sekund")
.arg(QString::number(pozostaloSekund*-1, 'f', 0));
QString textSzacowanyCzasPobierania = QString( "Szacowany czas pobierania: %1 sekund")
.arg(QString::number(szacowanyczaspobierania, 'f', 0));
ui->label_3->setText(textNazwaPliku);
ui->label_4->setText(textZrodlo);
ui->label_5->setText(textCel);
ui->label_6->setText(textUplyneloSekund);
ui->label_7->setText(textPozostaloSekund);
ui->label_8->setText(textSzacowanyCzasPobierania);
ui->label_9->setText(textPredkoscPobierania);
ui->label_10->setText(textRozmiarPobieranegoPliku);
ui->label_11->setText(textPobrano);
Program raz działa raz nie. Działa za 14 razem,a za 15 już nie i wyskakuje błąd(program zostanie zamknięty). Próbowałem go debugować. Wyskakują dwa identyczne problemy: Arithmetic exception (sygnał SIGFPE).
00408f7b: div %ecx
0040866d: jmp 0x408677
Wartość z 0x408677;
00408677: mov 0xc(%ebp),%ecx
Niestety nic mi to nie mówi, ponieważ nie znam Assemblera. Może ktoś wskazać gdzie popełniłem błąd ? Jeżeli nie dałem jakiejś istotniej informacji w celu wykrycia błędu, to proszę mówić.