Boost.Filesystem - Iterace adresáře -> Aborted (core dumped) – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Boost.Filesystem - Iterace adresáře -> Aborted (core dumped) – C / C++ – Fórum – Programujte.comBoost.Filesystem - Iterace adresáře -> Aborted (core dumped) – C / C++ – Fórum – Programujte.com

 

richard.zavodny0
Návštěvník
24. 9. 2017   #1
-
0
-

Zdravím, mám další problém. Opět. Nějaký ten pátek zpátky jsem řešil iteraci adresáře pomocí Direntu a nyní jsem se rozhodl to přepsat a použít k tomuto úkolu Boost.Filesystem. Problém ale je, že když iteruji větší adresář (v mém případě mojí domovskou složku (/home/zavodnyrichard)), tak mi to vyhodí několik set položek a později hlášku "Aborted (core dumped)".

Tady je kód:  

#include <iostream>
#include "boost/filesystem.hpp"

using namespace std;
using namespace boost::filesystem;

int findFiles(char* directory);

int main() {
    findFiles("/home/zavodnyrichard");

    return 0;
}

int findFiles(char* directory) {
    path p(directory);
    directory_iterator end_itr;

    for(directory_iterator itr(p); itr != end_itr; ++itr) {
        string current = itr->path().string();

        if(is_regular_file(current)) {
            cout << current << "\n";
        } else if(is_directory(current)) {
            char *directory = new char[current.size()+1];
            std::strcpy(directory, current.c_str());

            findFiles(directory);

            delete[] directory;
        }
    }
}

Předpokládám, že se mi zaplní paměť a potom to prostě spadne. Dle mého názoru to má co dočinění s tím, že začínám iterovat další adresář (funkce findFiles(directory);) a "nestihne" se provést delete[] directory;. Jak to ošetřit?

Předem díky moc. :)

Nahlásit jako SPAM
IP: 89.24.189.–
Programátor, Kóder, Grafický designér, Kritik, zastánce Open-Source a Linuxu.
gna
~ Anonymní uživatel
1891 příspěvků
24. 9. 2017   #2
-
0
-

Když si myslíš, že je to tím, tak to kopírování vyhoď, protože ho k ničemu nepotřebuješ.

Pak si do mainu dej try-catch a podívej se, jakou vyjímku to háže.

Nahlásit jako SPAM
IP: 213.211.51.–
richard.zavodny0
Návštěvník
24. 9. 2017   #3
-
0
-

Už vyřešeno, já si totiž nějak nevšiml, že Boost má funkci rekurzivního procházení. :/

Zamykám.

Nahlásit jako SPAM
IP: 89.24.189.–
Programátor, Kóder, Grafický designér, Kritik, zastánce Open-Source a Linuxu.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 40 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý