-
Data: 2019-03-09 14:08:00
Temat: Dziwny wyciek zasobów
Od: Szyk Cech <s...@s...pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]Witam
[WSTĘP]
Mam program w C++ oparty na bibliotece Qt. Generalnie program jest
niezależny od systemu operacyjnego. Jednak z jakichś dziwnych względów
biblioteka Qt nie ma możliwości operowania na datach plików i katalogów.
Dlatego napisałem funkcję w oparciu o Api Linux-a realizującą kopiowanie
dat plików. Jest to przydatne podczas kopiowania.
[PROBLEM]
Mam jakiś wyciek zasobów. W pewnym momencie operacja fopen się nie udaje
(po całkiem sporej liczbie poprawnych operacji). Wg mnie wszystko
powinno grać, ale błąd występuje.
[KOD]
Oto kod mojej funkcji:
void gCopyFileAtributes(QString aSource, QString aDest)
{
if(!QFileInfo::exists(aSource))
NOTIFY_EXCEPTION(QObject::tr("Source file does not exists:
%1").arg(aSource), gLibraryId, eErrorCode::eFileSystemError);
if(!QFileInfo::exists(aDest))
NOTIFY_EXCEPTION(QObject::tr("Destination file does not exists:
%1").arg(aDest), gLibraryId, eErrorCode::eFileSystemError);
FILE* lSrc = fopen(aSource.toUtf8(), "r");
if(!lSrc)
NOTIFY_EXCEPTION(QObject::tr("fopen failed for file: %1:
%2").arg(aSource).arg(strerror(errno)), gLibraryId,
eErrorCode::eFileSystemError);
FILE* lDest = fopen(aDest.toUtf8(), "w");
if(!lDest)
{
fclose(lSrc);
NOTIFY_EXCEPTION(QObject::tr("fopen failed for file: %1:
%2").arg(aDest).arg(strerror(errno)), gLibraryId,
eErrorCode::eFileSystemError);
}
struct stat lStat;
if(fstat(fileno(lSrc),&lStat))
{
fclose(lSrc);
fclose(lDest);
NOTIFY_EXCEPTION(QObject::tr("fstat failed for file: %1:
%2").arg(aSource).arg(strerror(errno)), gLibraryId,
eErrorCode::eFileSystemError);
}
// Update to the same uid/gid
if(fchown(fileno(lDest), lStat.st_uid,lStat.st_gid))
{
fclose(lSrc);
fclose(lDest);
NOTIFY_EXCEPTION(QObject::tr("fchown failed:
%1").arg(strerror(errno)), gLibraryId, eErrorCode::eFileSystemError);
}
// Update the permissions
if(fchmod(fileno(lDest), lStat.st_mode))
{
fclose(lSrc);
fclose(lDest);
NOTIFY_EXCEPTION(QObject::tr("fchmod failed:
%1").arg(strerror(errno)), gLibraryId, eErrorCode::eFileSystemError);
}
// Change access time
timeval lTimes[2];
lTimes[0].tv_sec = lStat.st_atim.tv_sec;
quint32 lUsecA(static_cast<quint32>(lStat.st_atim.tv_nsec / 1000));
lTimes[0].tv_usec = lUsecA;
// Change modification time
lTimes[1].tv_sec = lStat.st_mtim.tv_sec;
quint32 lUsecM(static_cast<quint32>(lStat.st_mtim.tv_nsec / 1000));
lTimes[1].tv_usec = lUsecM;
if(futimes(fileno(lDest), lTimes))
{
fclose(lSrc);
fclose(lDest);
NOTIFY_EXCEPTION(QObject::tr("futimes failed:
%1").arg(strerror(errno)), gLibraryId, eErrorCode::eFileSystemError);
}
fclose(lSrc);
fclose(lDest);
}
[OPIS FUNCKCJI]
Jak widać wszystko tworzone jest na stosie z wyjątkiem 2 zmiennych lSrc
i lDest. Jednak one są zawsze zwalniane i po za tym wyjątki nie są
zgłaszane w trakcie wcześniejszej pracy.
[OPIS ZGŁASZANEGO BŁĘDU]
File: ../../../../Kopia3/Src/Libs/Common/Src/FileTools.Lin
ux.cpp, in
line: 26, in function: gCopyFileAtributes
Error code: 3, Error message: fopen failed for file:
/tmp/Kopia/!-dokumenty 2019-03-09 13-17-03/Programowanie/Qt/C++ GUI
Programming with Qt 4/qt-book/chap06/mdieditor/images/new.png: Brak dostępu
Exception occurs! Sender: Common.so, Error code: 3
Message:
File: ../../../../Kopia3/Src/Libs/Common/Src/FileTools.Lin
ux.cpp, in
line: 26, in function: gCopyFileAtributes
Error code: 3, Error message: fopen failed for file:
/tmp/Kopia/!-dokumenty 2019-03-09 13-17-03/Programowanie/Qt/C++ GUI
Programming with Qt 4/qt-book/chap06/mdieditor/images/new.png: Brak dostępu
Bug report has been sent...
Może ktoś doradzi jak prawidłowo powinna wyglądać ta funkcja?
dzięki i pozdro
Szyk Cech
Następne wpisy z tego wątku
- 09.03.19 14:09 Szyk Cech
- 10.03.19 21:38 Wojciech Muła
- 23.03.19 14:37 Szyk Cech
- 23.03.19 21:30 Wojciech Muła
- 23.03.19 21:49 Borneq
- 24.03.19 11:55 Szyk Cech
- 25.03.19 23:13 Wojciech Muła
Najnowsze wątki z tej grupy
- Prezydent SZAP/USONA Trump ułaskawił prezydenta Hondurasu Hernandeza skazanego na 45 lat więzienia
- Rosjanie chwalą się prototypem komputera kwantowego. "Najważniejszy projekt naukowy Rosji"
- A Szwajcarzy kombinują tak: FinalSpark grows human neurons from stem cells and connects them to electrode arrays
- Re: Najgorszy język programowania
- NOWY: 2025-09-29 Alg., Strukt. Danych i Tech. Prog. - komentarz.pdf
- Na grupie comp.os.linux.advocacy CrudeSausage twierdzi, że Micro$lop używa SI do szyfrowania formatu dok. XML
- Błąd w Sofcie Powodem Wymiany 3 Duńskich Fregat Typu Iver Huitfeldt
- Grok zaczął nadużywać wulgaryzmów i wprost obrażać niektóre znane osoby
- Can you activate BMW 48V 10Ah Li-Ion battery, connecting to CAN-USB laptop interface ?
- We Wrocławiu ruszyła Odra 5, pierwszy w Polsce komputer kwantowy z nadprzewodzącymi kubitami
- Ada-Europe - AEiC 2025 early registration deadline imminent
- John Carmack twierdzi, że gdyby gry były optymalizowane, to wystarczyły by stare kompy
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2025
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- ,,Polski przemysł jest w stanie agonalnym" - podkreślił dobitnie, wskazując na brak zamówień.
Najnowsze wątki
- 2026-01-10 Przeprosiny
- 2026-01-10 Kominiarze
- 2026-01-10 Zagadka radiowa
- 2026-01-10 Prostownik
- 2026-01-09 EKOFASZYŚCI DO NAUKI Chiny odpaliły reaktor na tor. Zachód przespał ten moment? - AstroSzort
- 2026-01-09 Sebastian M
- 2026-01-09 weto nowelizacji ustawy o ś.u.d.e. (wz. DSA)
- 2026-01-09 Warszawa => Dynamics 365 Commerce/POS Developer <=
- 2026-01-09 Ładowanie w 13 minut
- 2026-01-08 Umiejętność tankowania na egzaminie z prawa jazdy
- 2026-01-08 Nowy akumulator Donut Lab
- 2026-01-08 Komenda policji nie ma nic wspólnego ze sprawą zgwałcenia policjantki
- 2026-01-08 Pilot do zamka/bramy
- 2026-01-08 Ślad węglowy
- 2026-01-08 Prezydent SZAP/USONA Trump ułaskawił prezydenta Hondurasu Hernandeza skazanego na 45 lat więzienia




5 Najlepszych Programów do Księgowości w Chmurze - Ranking i Porównanie [2025]