Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [C] - Realloc

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    17

    [C] - Realloc

    Ciao a tutti.

    Vorrei riallocare la memoria di una variabile che mi viene passata come puntatore, e fare in modo che la realloc fatta all'interno della funzione abbia effetto anche nella variabile che passo come parametro.

    In sintesi il codice è questo:

    codice:
    int main()
    {
    	char 	*parola = malloc(sizeof(char) * 10);
    	
    	func(parola);
    }
    
    void func (char *parola)
    {
    		parola = (char *)realloc (parola, sizeof(char) * (20));
    }
    Con le funzioni impostate in questo modo la realloc ha effetto solo all'interno della funzione "func" lasciando la variabile parola della funzione "main" intatta.

    C'è soluzione a questo?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Ovviamente ... se una variabile deve essere modificata all'interno di una funzione, allora la devi passare per puntatore ... e questo vale anche per i puntatori ...

    Quindi

    codice:
    void func (char **parola)
    {
        *parola = (char *)realloc (*parola, sizeof(char) * (20));
    }
    
    int main()
    {
       char *parola = (char *)malloc(sizeof(char) * 10);
    	
       func(&parola);
    }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    17
    In questo modo mi da Segmentation Fault.

    All'interno di func richiamo un'altra funzione alla quale passo "*parola".

    E' possibile che il segmentation fault dipenda dall'altra funzione chiamata all'interno di func? Questa funzione parola viene passato come "*parola" e non come "**parola".

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da p002244
    In questo modo mi da Segmentation Fault.
    No ... questo codice non da' errori ...

    All'interno di func richiamo un'altra funzione alla quale passo "*parola".
    Ah ... se c'e' altro codice, postalo.

    E' possibile che il segmentation fault dipenda dall'altra funzione chiamata all'interno di func? Questa funzione parola viene passato come "*parola" e non come "**parola".
    Puo' essere ... dipende dall'uso che ne fai all'interno ... ma se non la mostri ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    17
    Queto è il codice:

    codice:
    void func(char **word)
    {
    	int		i;
    	i = 0;
    	
    	do
    	{
    		**word = func2(*word,validate(),i);
    		i++;
                   if(...)
                    {
                    *word = (char *)realloc (*word, sizeof(char) * (i+10)
                    }
    	} while (*word[i-1] != '\n');
    
    	*word[i-1] = '\0';
    
    }
    
    
    char func2 (char *string, char c, int i)
    {
    
    		string[i] = c;
    
    	
    	return (*string);
    }
    La funzione "validate" richiamata all'interno di func è una funzione che restituisce 1 carattere.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Attenzione alle precedenze

    while((*word)[i-1] != '\n');

    (*word)[i-1] = '\0';

    Inoltre, questa

    **word =

    scrivera' sempre lo stesso carattere ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    17
    Risolto.
    Era quello il problema!

    Grazie tante!

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.