Errore realloc() di una string in C

di Anonimizzato7036 il
7 risposte
Salve e grazie anticiapatamente,

sto studiando in C, e mi sono scontrato con il problema che cercherò di spiegare in seguito ... La compilazione della seguente funzione non restituisce errori, ma in esecuzione ho un errore. Le due stringhe vengono memorizzate correttamente ma la chiamata della funzione realloc fallisce....
void concat_string()
{
    char buffer[256], *string_origin = "", *string_new="";
    size_t size_string_origin = 0 , size_string_new = 0 , size_string_conc=0;
    
    size_string_origin = input_string(buffer);
    string_origin = (char*) malloc(size_string_origin*(sizeof(char)));
    
    if( strcpy(string_origin, buffer) == NULL)
        puts("\nError string origin ");
    
    size_string_new = input_string(buffer);
    
    string_new = (char*) malloc(size_string_new*(sizeof(char)));
    if( strcpy(string_new, buffer) == NULL)
        puts("\nError string origin ");
     
    size_string_conc = size_string_origin+size_string_new ;
    
    string_origin = (char*) realloc( string_origin ,( size_string_conc)*(sizeof(char)));
    strcat(string_origin, string_new);
    printf("\nConcatenated string = %s", string_origin);
    
    free(string_new);
    free(string_origin);
    }

7 Risposte

  • A se all'ultimo fai la free che senso ha?
  • Ciao,

    lo scopo è prettamente didattico, alla fine libero la memoria perchè dopo aver stampato il risultato non mi serve piu.

    La cosa che non capisco è perchè c'è un errore nell'riallocazione della memoria, forse sbaglio nella sintassi?
  • Ma quale errore scusa? Da cosa lo vedi questo errore?
  • Sto utilizzando CodeLite sotto windows, quando il programma chiama realloc() si interrompe visualizzando "Program Received signal SIGTRAP", e non riesco neanche a debaggare.
  • Puoi testare i parametri che passi con una printf prima della realloc per capire se c'è qualcosa di anomalo.
    Non è possibile provare il codice senza avete la funzione input_string e capire cosa fa.
  • Ho provato con printf ed in debug e le stringhe "string_origin" e "string_new"sono valorizzate correttamente, alla chiamata del realloc ho il crash con il messaggio di errore.

    La funzione input_string() è la seguente
    
    size_t input_string(char *string_buffer)
    {
            
        clear_stdin();
        puts("\nInsert string : ");
        gets(string_buffer);
        clear_stdin();
        
        return strlen(string_buffer);
    }
    
    Non vorrei sia un problema di codelite magari mi conviene provare con un altro tool?
  • La prova oggetto della discussione l`avevo fatta sollo windows con codelite.
    Ho riprovato sotto linux con qtcreator e il problema non si è verificato.

    Adesso riprovo qtcreator sotto windows per capire se il problema è in codelite o meno....
Devi accedere o registrarti per scrivere nel forum
7 risposte