Portál AbcLinuxu, 10. května 2025 01:21

Dotaz: Podivná chyba při práci s frontou ukazatelů

22.5.2009 22:35 Tomáš | skóre: 7
Podivná chyba při práci s frontou ukazatelů
Přečteno: 140×
Odpovědět | Admin
Mám problém a vůbec nevím, v čem je chyba. Mám vlákno, které přijme jako parametr ukazatel na strukturu. A jako globalni promennou mam pole front ukazatelů na ukazatele na strukturu.

queue <Obcan *> * queueStamps[101]; //fronta

void * obcan(void * data) {
    Obcan * dataObcana = (Obcan *)data;

    while(1) {
        pthread_mutex_lock(&mutex_obcan);
        cout << dataObcana->neededStamps[0]; //vypis normalne ukaze cislo-napr 1
        (queueStamps[dataObcana->neededStamps[0]])->push(dataObcana); // a tady vzdycky nastane chyba "Segmentation fault"
       

        pthread_mutex_unlock(&mutex_obcan);
        sem_wait(&dataObcana->sem_obcan);
    }
}

Vůbec nevím, proč nastává ta podivná chyba.

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

22.5.2009 23:23 Tomáš | skóre: 7
Rozbalit Rozbalit vše Re: Podivná chyba při práci s frontou ukazatelů
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ještě takovej dodatek. Tohle mi hodila kompilace na cygwinu (předtím jsem testoval na solarisu, kde to šlo i spustit).

Semestralka.cpp:205: error: request for member `push' in `queueStamps[(((std::vector< int, std::allocator< int > >*)dataObcana) + 20u)->std::v ector<_Tp, _Alloc>::operator[] [with _Tp = int, _Alloc = std::allocator< int >](0u)]', which is of non-class type `std::queue< Obcan*, std::de que< Obcan*, std::allocator< Obcan* > > >*'
Řešení 1× (Tomáš (tazatel))
Vojta Drbohlav avatar 22.5.2009 23:30 Vojta Drbohlav | skóre: 26 | blog: Blog | Strahov
Rozbalit Rozbalit vše Re: Podivná chyba při práci s frontou ukazatelů
Odpovědět | | Sbalit | Link | Blokovat | Admin
A máš alokovanou paměť pro jednotlivé prvky toho globalního pole?
23.5.2009 00:20 Tomáš | skóre: 7
Rozbalit Rozbalit vše Re: Podivná chyba při práci s frontou ukazatelů
No, to jsem teda zapomněl na dost základní věc. A nenapadlo mě to za celý odpoledne :) Díky moc

Založit nové vláknoNahoru

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

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.