abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 04:22 | Pozvánky

    Letos se uskuteční již 11. ročník soutěže v programování Kasiopea. Tato soutěž, (primárně) pro středoškoláky, nabízí skvělou příležitost procvičit logické myšlení a dozvědět se něco nového ze světa algoritmů – a to nejen pro zkušené programátory, ale i pro úplné začátečníky. Domácí kolo proběhne online od 22. 11. do 7. 12. 2025 a skládá se z 9 zajímavých úloh různé obtížnosti. Na výběru programovacího jazyka přitom nezáleží – úlohy jsou

    … více »
    SoutezKasiopea | Komentářů: 0
    dnes 04:11 | Nová verze

    Byla vydána nová verze 2.52.0 distribuovaného systému správy verzí Git. Přispělo 94 vývojářů, z toho 33 nových. Přehled novinek v příspěvku na blogu GitHubu a v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    včera 18:00 | Nová verze

    VKD3D-Proton byl vydán ve verzi 3.0. Jedná se fork knihovny vkd3d z projektu Wine pro Proton. Knihovna slouží pro překlad volání Direct3D 12 na Vulkan. V přehledu novinek je vypíchnuta podpora AMD FSR 4 (AMD FidelityFX Super Resolution 4).

    Ladislav Hagara | Komentářů: 0
    včera 03:11 | Nová verze

    Poštovní klient Thunderbird byl vydán v nové verzi 145.0. Podporuje DNS přes HTTPS nebo Microsoft Exchange skrze Exchange Web Services. Ukončena byla podpora 32bitového Thunderbirdu pro Linux.

    Ladislav Hagara | Komentářů: 1
    včera 02:33 | IT novinky

    U příležitosti státního svátku 17. listopadu probíhá na Steamu i GOG.com již šestý ročník Czech & Slovak Games Week aneb týdenní oslava a také slevová akce českých a slovenských počítačových her.

    Ladislav Hagara | Komentářů: 0
    16.11. 19:33 | Nová verze

    Byla vydána nová verze 9.19 z Debianu vycházející linuxové distribuce DietPi pro (nejenom) jednodeskové počítače. Přehled novinek v poznámkách k vydání. Vypíchnout lze například nový balíček BirdNET-Go, tj. AI řešení pro nepřetržité monitorování a identifikaci ptáků.

    Ladislav Hagara | Komentářů: 0
    16.11. 02:22 | Nová verze

    Byla vydána nová verze 3.38 frameworku Flutter (Wikipedie) pro vývoj mobilních, webových i desktopových aplikací a nová verze 3.10 souvisejícího programovacího jazyka Dart (Wikipedie).

    Ladislav Hagara | Komentářů: 0
    16.11. 01:33 | Nová verze

    Organizace Apache Software Foundation (ASF) vydala verzi 28 integrovaného vývojového prostředí a vývojové platformy napsané v Javě NetBeans (Wikipedie). Přehled novinek na GitHubu. Instalovat lze také ze Snapcraftu a Flathubu.

    Ladislav Hagara | Komentářů: 0
    15.11. 16:11 | Nová verze

    Byl vydán Debian 13.2, tj. druhá opravná verze Debianu 13 s kódovým názvem Trixie. Řešeny jsou především bezpečnostní problémy, ale také několik vážných chyb. Instalační média Debianu 13 lze samozřejmě nadále k instalaci používat. Po instalaci stačí systém aktualizovat.

    Ladislav Hagara | Komentářů: 0
    15.11. 12:11 | IT novinky

    Google představil platformu Code Wiki pro rychlejší porozumění existujícímu kódu. Code Wiki pomocí AI Gemini udržuje průběžně aktualizovanou strukturovanou wiki pro softwarové repozitáře. Zatím jenom pro veřejné. V plánu je rozšíření Gemini CLI také pro soukromé a interní repozitáře.

    Ladislav Hagara | Komentářů: 5
    Jaké řešení používáte k vývoji / práci?
     (35%)
     (46%)
     (19%)
     (18%)
     (23%)
     (15%)
     (23%)
     (16%)
     (16%)
    Celkem 361 hlasů
     Komentářů: 16, poslední 12.11. 18:21
    Rozcestník

    Dotaz: Linearny zoznam c++

    Xgamer avatar 8.3.2011 15:23 Xgamer | skóre: 4
    Linearny zoznam c++
    Přečteno: 541×
    Zdravím už zopár dní bojujem zo zadaním z C++. A už som fakt zúfalý :( Mojou ulohou je dorobiť danú šablonu. Tu su zdrojáky:

    main.c
    #include < iostream >
    #include "cList.h"
    using namespace std;
    
    int main()
    {
        cout << "Linked List" << endl;
        cout << "--------------" << endl;
        cNode* n1 = new cNode("1");
        cNode* n2 = new cNode("2");
        cNode* n3 = new cNode("3");
    
        cList zoznam;
        zoznam.append(n1);
        zoznam.append(n2);
        zoznam.append(n3);
        zoznam.append(new cNode(*n1));
        zoznam.append(new cNode(*n1));
        zoznam.append(new cNode(*n1));
        zoznam.printContents();
    
        cNode* n4 = new cNode("4");
        cNode* n2_5 = new cNode("2.5");
        zoznam.insert(n4, 10);
        zoznam.insert(n2_5, 2);
        zoznam.deleteNode(1);
        zoznam.deleteNode(0);
        zoznam.deleteNode(10);
        cout<<"---------------------------"<< endl;
        zoznam.printContents();
    
        cList zoznam2 = cList(zoznam);
        zoznam2.deleteNode(0);
        zoznam2.deleteNode(0); // nezmaže mi nultý prvok vidim to na problem s kopirovacím konštruktorom
        cout<<"------------Zoznam 1 - original---------------"<< endl;
        zoznam.printContents();
        cout<<"------------Zoznam 2 - kopia---------------"<< endl;
        zoznam2.printContents();
    
       delete n1; // hádže segmantation fault
       delete n2;
       delete n3;
       delete n4;
       delete n2_5;
    
        return 0;
    }
    [/code]
    
    Problémový kod z cList.cpp 
    
    [code]#include "cList.h"
    
    using namespace std;
    cList::cList()
    {
        first = NULL;
    }
    
    cList::cList(const cList &oldList) // kopíruje aj to čo už nemá byť v pamäti, predpokladám že preto mi nemaže to čo by malo 
    {
    
        first = NULL;
    
        if (oldList.getLength() > 0)
        {
            first = new cNode(oldList.first->getData());
    
            cNode *tmp = first, *tmp2;
    
            for (int i = 0; i < oldList.getLength(); i++)
            {
                tmp2 = new cNode(oldList.getNode(i)->getData());
    
                tmp->setNext(tmp2);
    
                tmp = tmp2;
            }
        }
    }
    
    cList::~cList() // tento deštruktor asi sposobuje segmentation fault
    {
        for(int i = 0;i < getLength();i++)
        {
            cNode *tmp = getNode(i); // funkcie getNode vráti uzol na danom indexe, funguje v iných častiach kodu, v nej by problem byť nemal
            delete tmp;
        }
        delete first;
    }
    Ostatne časti kodu zatial nebudem posielať.. . Som si na 99% istý že problem je v tomto kode. Pridal som do zdrojaku komentáre že čo nefunguje. Pri kopirovaní celeho zoznamu sa skopiruje aj to čo by tam už nemalo byť neviem prečo:( V tom deštruktore idem asi zle na to uvolnovanie pamäte.. ale zase keď nemam v tom deštruktore nič tak mi to počas delete sekcie v main.c vypiš random vypis pamäte... Ďakujem :)

    Řešení dotazu:


    Odpovědi

    8.3.2011 17:03 Sten
    Rozbalit Rozbalit vše Re: Linearny zoznam c++
    Není náhodou getNode(0) to samé, co first? Protože jinak ho kopírujete a mažete dvakrát.
    Řešení 1× (Xgamer (tazatel))
    Xgamer avatar 8.3.2011 17:18 Xgamer | skóre: 4
    Rozbalit Rozbalit vše Re: Linearny zoznam c++
    Hej na to som prišiel :) preto mi to zle mazalo v kopií, už som to doriešil vlastnými silami, aj keď niekto by mi mohol poradiť ako na optimálneho deštruktora. Ako je navýhodnejšie uvolnit pamät ktory si ten linearny zoznam alokuje? thx
    Řešení 1× (Xgamer (tazatel))
    8.3.2011 17:56 Sten
    Rozbalit Rozbalit vše Re: Linearny zoznam c++
    Třeba takto:
    cList::~cList()
    {
    	this->clear();
    }
    
    void cList::clear()
    {
    	struct destroyer
    	{
    		destroyer(cNode *first)
    			: current(first)
    		{}
    
    		~destroyer()
    		{
    			this->operator ()();
    		}
    
    		void operator ()()
    		{
    			while (this->current) {
    				cNode *n = this->current;
    				this->current = n->getNext();
    				delete n;
    			}
    		}
    
    		cNode *current;
    	};
    
    	destroyer d(this->first);
    	d();
    }
    
    Tohle správně zdestruuje celý seznam, i pokud destruktor některého cNode vyhodí výjimku.

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.