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í
×
včera 17:35 | Bezpečnostní upozornění

Německá Bundesnetzagentur (obdoba českého ČTU) zakázala na německém území prodej panenky Cayla kvůli „špionáži“ dětí. Tato elektronická hračka obsahuje mikrofon, reproduktor a kameru a bezdrátové komunikační rozhraní, pomocí kterého se hračka připojuje na servery výrobce. Takovýmto způsobem může hračka pomocí umělé inteligence „odpovídat“ na dotazy dítěte. Hlavní problém bude ale asi někde jinde, podle prvotních zpráv může

… více »
Petr Tomášek | Komentářů: 18
17.2. 15:30 | Bezpečnostní upozornění

CSIRT.CZ upozorňuje, že bezpečnostní experti objevili nový typ malwaru, jenž cílí na open source e-commerce platformu Magento. Malware je zajímavý tím, že se jedná o první svého druhu, jehož kód zůstává skrytý v SQL databázi zasaženého e-shopu. Škodlivý kód je volán pomocí tzv. SQL trigerru, který je spouštěn při každém vytvoření objednávky v systému.

Ladislav Hagara | Komentářů: 0
17.2. 09:00 | Nová verze

Bylo vydáno Ubuntu 16.04.2 LTS, tj. druhé opravné vydání Ubuntu 16.04 LTS s kódovým názvem Xenial Xerus. Přehled novinek v poznámkách k vydání a v přehledu změn.

Ladislav Hagara | Komentářů: 37
17.2. 06:00 | Zajímavý článek

Pavel Tišnovský se v dvoudílném článku na MojeFedora.cz věnuje tvorbě pluginů (modulů) pro bitmapový grafický editor GIMP. Pomocí pluginů lze GIMP rozšiřovat o další funkce. Implementovat lze například nové filtry nebo pomocné utility pro tvorbu animací či poloautomatickou retuš snímků.

Ladislav Hagara | Komentářů: 6
16.2. 23:32 | Komunita

Do 30. března se lze přihlásit do dalšího kola programu Outreachy, jehož cílem je přitáhnout do světa svobodného a otevřeného softwaru lidi ze skupin, jež jsou ve světě svobodného a otevřeného softwaru málo zastoupeny. Za 3 měsíce práce, od 30. května do 30. srpna 2017, v participujících organizacích lze vydělat 5 500 USD. Jedná se již o 14. kolo tohoto programu.

Ladislav Hagara | Komentářů: 11
16.2. 23:13 | Nová verze

Byla vydána verze 0.92.1 svobodného multiplatformního vektorového grafického editoru Inkscape. Přehled novinek v poznámkách k vydání. Řešen je mimo jiné problém s verzí 0.92, jež rozbíjí dokumenty vytvořené v předchozích verzích Inkscape. Více v příspěvku na blogu Davida Revoye, autora open source webového komiksu Pepper&Carrot nebo portrétu GNU/Linuxu.

Ladislav Hagara | Komentářů: 0
16.2. 16:26 | Bezpečnostní upozornění

Byla vydána verze 1.1.0e kryptografické knihovny OpenSSL. Dle bezpečnostního upozornění 20170216 byla opravena závažná bezpečnostní chyba CVE-2017-3733.

Ladislav Hagara | Komentářů: 1
16.2. 13:03 | Pozvánky

GNOME hackaton proběhne v Brně na FIT VUT v Red Hat Labu (budova Q) v pondělí 20. února od 15:00. Registrace není nutná, ale pokud dáte na FaceBooku vědět, že plánujete dorazit, pomůže to s plánováním.

Ladislav Hagara | Komentářů: 0
16.2. 13:02 | Pozvánky

Únorový Prague Containers Meetup se koná 21. února v budově MSD. Můžete se těšit na přednášky o tom, proč a jak používat kontejnery a zároveň získat zajímavý pohled na historii a budoucnost kontejnerů.

little-drunk-jesus | Komentářů: 0
16.2. 08:55 | Zajímavý software

Google na svém blogu věnovaném vývojářům oznámil vydání verze 1.0 open source knihovny pro strojové učení TensorFlow (Wikipedie). Přehled novinek v poznámkách k vydání na GitHubu. Zdrojové kódy TensorFlow jsou k dispozici pod licencí Apache 2.0.

Ladislav Hagara | Komentářů: 0
Jak se stavíte k trendu ztenčování přenosných zařízení (smartphony, notebooky)?
 (13%)
 (2%)
 (72%)
 (3%)
 (10%)
Celkem 655 hlasů
 Komentářů: 52, poslední 13.2. 12:45
Rozcestník
Reklama

Dotaz: Linearny zoznam c++

Xgamer avatar 8.3.2011 15:23 Xgamer | skóre: 4
Linearny zoznam c++
Přečteno: 401×
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.