list



  • typedef list<SOCKET> SocketList
    ...
    SocketList slist;
    ...
    SOCKET * cli_s = new SOCKET;
    ...
    slist.push_back (*cli_s);
    ...
    for (SocketList::iterator ci = slist.begin(); ci != slist.end(); ++ci)
        {
            SOCKET * itm = &(*ci);
            slist.erase(ci);
            delete itm;
        }
    

    SOCKET = int

    und wo liegt der Fehler ??



  • slist.push_back(*cli_s);

    an der Stelle wird eine Kopie von *cli_s in die Liste eingefügt. Vermutlich geht der Zeiger cli_s danach verloren (-> Memory Leak). Später dann deletest du eine dieser Kopien. Du kannst aber nur Pointer deleten, die tatsächlich mit new alloziert wurden.

    Warum überhaupt new? Entweder du machst es weiterhin mit new und packst Zeiger auf SOCKET in die Liste, oder du machst es ganz simpel mit Werten.



  • for (SocketList::iterator ci = slist.begin(); ci != slist.end(); ++ci)
            {
                if (FD_ISSET (*ci, &fds))
                {                
                    bytes = recv (*ci, recvbuffer, BUFFER_SIZE-1, 0);
    
                    if (bytes == SOCKET_ERROR)
                    {
                        closesocket (*ci);
                        slist.erase(ci); // erzeugt einen Laufzeitfehler!!
    
                        FD_CLR (*ci, &ref_fds);
    
                    }
                    else
                    {                
                        recvbuffer[bytes] = '\0';
                        for (SocketList::const_iterator ci2 = slist.begin(); 
                                ci2 != slist.end(); ci2++)
                        {
                            bytes = send (*ci2, recvbuffer, sizeof(recvbuffer), 0);
    
                            if (bytes == SOCKET_ERROR)
                            {
                                return -1;
                            }
                        }
    
                    }
    
                    FD_CLR (*ci, &fds);
                }
                else
                {}
            }
    

    der Fehler ist immer noch drin !
    und zwar scheint die Liste 2 Einträge zu haben, obwohl ich nur ein push_back()
    verwendet hab !!

    <EDIT> Unzureichende Beschreibung </EDIT>

    [ Dieser Beitrag wurde am 03.06.2003 um 22:12 Uhr von N00Bie editiert. ]



  • könnt ihr mir bitte helfen?


Anmelden zum Antworten