Visualizzazione dei risultati da 1 a 4 su 4

Discussione: C malloc/realloc

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,316

    C malloc/realloc

    E' a tema didattico perciò preferirei non mi diceste che c'è la possibilità di farlo in maniera Y.

    Sto cercando di scorrere *prova e copiare il valore di *prova ogni ciclo in tmp aggiungendo ogni lettera letta.

    codice:
    void explode(char **str) {
        int  i = 0;
        char *prova = "-1,-1,2,3";
        char *tmp = NULL;
    
        for (; i < strlen(prova); i++) {
            if (tmp != NULL) {
                tmp = realloc(tmp, (strlen(tmp)+1) * sizeof(char));
            } else {
                tmp = malloc(1 * sizeof(char));
            }
            
            tmp[i] = *(prova+i);
            
            printf("\nsize: %ld\n", strlen(tmp));
            printf("\ntmp: %s\n", tmp);
        }
        
        free(tmp);
    }
    Perchè se sostituisco realloc(tmp, (strlen(tmp)+1) * sizeof(char)) con realloc(tmp, 1 * sizeof(char)) funziona comunque?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    In quel modo allochi meno memoria del necessario e poi vai a scrivere in aree di memoria che possono essere riservate ad altri scopi con la possibilità di crash.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,316
    Quote Originariamente inviata da oregon Visualizza il messaggio
    In quel modo allochi meno memoria del necessario e poi vai a scrivere in aree di memoria che possono essere riservate ad altri scopi con la possibilità di crash.

    Quindi la differenza è semplicemente che se la alloco con realloc(tmp, 1 * sizeof(char)) posso causare errori perchè ho allocato in maniera errata la memoria?

    Ho capito bene?

    Grazie.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Sì, è un grave errore.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.