Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    2,460

    [c] malloc e segmentation fault

    allora ho il seguente codice:

    codice:
    char *hostQuery[MAX_THREAD*2];
    ...
    hostQuery[i+1] = (char *)malloc(sizeof(char)*strlen(p3));
    strcpy(hostQuery[i+1], p3);
    ...
    Segfaulta sulla malloc(), quando i=2 e p3 è una stringa di 134 caratteri, hostQuery[i+1] = "0x0".

    Ho aggiunto un controllo per vedere se la malloc restituiva NULL ma segfaultava ugualmente, di memoria ne ho ancora
    disponibile, per cui non capisco quale sia l'errore.

    Avete idee ?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Quanto vale

    MAX_TRHEAD

    ?

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    2,460
    50..

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Presumo tu lavori con Linux e gcc ...

    Non ho capito bene quando scrivi

    hostQuery[i+1] = "0x0"

    se intendi che il puntatore restituito dalla malloc e' zero, anche perche' dici che l'errore lo hai sulla malloc stessa e quindi non e' possibile sapere quanto vale il puntatore.

    Secondo me il problema lo hai sulla istruzione seguente, la strcpy, e questo perche' nell'allocazione della memoria non hai previsto lo spazio per il terminatore. Dovresti modificare la malloc in questo modo

    hostQuery[i+1] = (char *)malloc(sizeof(char)*(strlen(p3)+1));

    per non avere problemi con la strcpy che segue

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    2,460
    Quello è l'output di gdb su quel puntatore (ho verificato che fosse vuoto).

    Ma la strcpy alla fine della stringa aggiunge uno '\0' anche se c'è già nella stringa da copiare ?
    facendo infatti print p3[numero ultimo carattere] c'è \0, per cui non dovrei avere bisogno del +1 nel malloc..

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Certo ... lo aggiunge ... ma lo spazio lo devi prevedere tu.

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    2,460
    Ok ho aggiunto li e non segfaulta più li..

    ora mi da un errore una free:

    free(): invalid pointer

    che sclero !!

    ps il puntatore non è nullo

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Questo e' un altro problema.

    Devi aprire un altro thread specificando il problema e il codice relativo (ovviamente non basta far vedere la free ...)

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.