Vecchia domanda, ma ho ancora alcuni pensieri però.Matrice in C e il suo puntatore
char * getarrmal(void)
{
char *str;
str = (char *)malloc(10);
str[0] = 'a';
str[1] = 'b';
str[2] = 'c';
str[3] = '\0';
return str;
}
char * getarrdef(void)
{
char *str = "hello";
return str;
}
char * getarrfix(void)
{
char str[10] = "world";
return str;
}
Tre funzioni. I primi due restituiranno l'indirizzo di stringa e la stringa verrà archiviata nell'heap in modo che sia possibile continuare a utilizzarlo, ad esempio la funzione main().
Nell'ultima funzione, lo str è una variabile locale e lo str restituito non può essere utilizzato.
La mia domanda è, quando torno nella funzione che sta chiamando i primi due, dovrei liberarli manualmente? È facile credere che il caso malloc sia vero, ma non sono sicuro che sia anche il caso di char * str = "ciao".
Se utilizzo getarrdef() e non restituisce il valore restituito, in qualche modo avrò perdite di memoria?
Se lo hai assegnato, e non hai usato 'malloc' (o uno dei suoi cugini) per farlo, non chiami' free'. Semplice. –