Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    20

    Impossibile leggere da stdin con una fgets da dentro un thread..!

    Salve a tutti,
    pongo un problema alquanto strano.. da main io do vita ad un thread incaricato di leggere dallo standard input. Queste letture gliele faccio fare con una fgets() ma, ovviamente, non mi funge.. ^^
    L'eccezione a runtime è la seguente:
    *** glibc detected *** ./msgcli: munmap_chunk(): invalid pointer: 0xbfc64570 ***

    Posto il pezzetto di codice della funzione che esegue il thread alla creazione:
    codice:
    static void* senderJob(void *arg) {
    	char line[MESSAGE_MAX_LENGTH];
    	
    	while(1) {
    		if(fgets(line, MESSAGE_MAX_LENGTH, stdin) == NULL) SEND_EXIT(1, "Error while reading from standard input")
    		...
            }
    Ho verificato che il problema si verifica proprio per colpa di 'stdin'... I thread di un medesimo processo non condividono tutti la tabella dei file aperti?
    Non dovrebbe essere un problema, quindi, poter leggere da standard input...

    Qualcuno ha qualche idea brillante?? :master:

    Thanks a lot...

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    20
    Info aggiuntive:

    Sono su kubuntu.. per la creazione del thread utilizzo la system call relativa ai thread POSIX pthread_create().

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    20
    La versione del kernel di ubuntu è 2.6.31-19, mentre la versione del compilatore è
    - gcc version 4.4.1 (Ubuntu 4.4.1-4ubuntu9)

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301

    Moderazione

    Se ci sono altri dati che devi fornire, per favore indicali tutti in una volta, senza aggiungerne un pezzo regolarmente ogni 1/2 ore...
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Ma comunque non si può dire nulla da quelle poche righe di codice, e poi il problema sembra riguardare un tentativo di deallocazione di memoria tentata su un puntatore non valido (appunto l' "invalid pointer"). Sei sicuro di aver individuato che l'errore sia lì? Il codice intero è troppo lungo per essere controllato?
    every day above ground is a good one

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    20
    Ciao..
    sì, sono particolarmente sicuro che il problema sia proprio lì.. e NON è la fgets(), in quanto riscontro il medesimo problema anche con la fgetc(), la fscanf()... ed è proprio 'stdin' il vero problema..

    Grazie che almeno mi hai risposto.. ho perso un pomeriggio per cercare di trovare soluzione a questo problema.. e ancora niente..

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    A me sembra più un errore di "heap" ... (malloc/free che danno problemi ...)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    20
    Ok, trovato..
    chiedo scusa a tutti per avervi fatto perdere tempo.. in effetti il problema era una free ma non era dentro al thread.. ma nel thread main..

    Grazie a chi mi ha aiutato e mi ha fatto notare pian piano l'errore..
    Scusate di nuovo.

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Originariamente inviato da galele87
    in effetti il problema era una free ma non era dentro al thread.. ma nel thread main..
    Ecco ...

    Scusate di nuovo.
    Di nulla ... non capisco perché ti eri fissato con lo stdin, poverino ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    20
    Di nulla ... non capisco perché ti eri fissato con lo stdin, poverino ...
    Ehehe.. perchè da bravo scemo, usando delle stampe a video sceme per fare un debug scemo, ogni volta mi fermavo sulla fgets()...

    e intanto era il main thread che sollevava l'eccezione..

    mi sento un pò.. scemo?

    P.s. per punizione scrivo su un foglio 100 volte "Io e il parallelismo non andiamo d'accordo"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.