Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2009
    residenza
    Roma
    Messaggi
    371

    [C]Errore free abbastanza semplice

    Ho una funzione e dovrei capire il motivo di un dato errore ma non ne riesco a venire a capo, vi posto il codice(si tratta di codice C)
    Codice PHP:
    void f2(void) {
        
    char *a, *b, *c;

        
    "ciao";
        if (!(
    malloc(sizeof(char) * 10))) {
            return;
        }
        
    strcpy(b"prova1");

        
    b;
        
    a;
        
    c;
        
    NULL;

        
    printf("a = '%s'\nb = '%s'\n"ab);

        
    free(b);

    So per certo che l'errore avviene nel free(b) a causa dello scambio fra a e b, quello che non capisco è perché? mi limito a scambiare le stringhe a cui puntano, nel momento in cui vado a liberare la memoria puntata da b per quale motivo dovrebbe dare errore?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    L'unico puntatore su cui puoi fare il free è quello della malloc (ovvero quello che hai memorizzato in b).

    Quando scrivi

    b=a;

    il valore del puntatore b diventa un altro, ovvero diventa il puntatore a "ciao" (fra l'altro un puntatore ad una stringa costante) e quindi non puoi usare la free.

    Quello che forse non ti è chiaro è che la cosa importante non è il nome del puntatore (a b o c) ma il suo valore.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2009
    residenza
    Roma
    Messaggi
    371
    no, quello che non sapevo è che non si può usare il free su zone di memoria non create con malloc

    grazie mille, sei stato chiarissimo

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da davidinho
    no, quello che non sapevo è che non si può usare il free su zone di memoria non create con malloc
    Beh, non ha senso che il programma liberi memoria non allocata.

    malloc/free vanno sempre in coppia ...

    grazie mille
    Di nulla
    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.