Return ArrayLocale

di il
10 risposte

Return ArrayLocale

Ciao a tutti.

Concludendo una funzione in linguaggio C, per la gestione di due puntatori ad array, mi sono bloccato a questo problema. Durante la compilazione del programma riscontro questo Warning:function returns address of local variable [enabled by default]

Da quello che ho capito non dovrei far ritornare, da funzione, una array in locale.
Ora vi chiedo, come posso risolvere questo problema? Come ho detto sopra il programma prende due puntatori ad array, li elabora (sostituzioni ed eliminazioni) creando passo passo un nuovo array (in funzione). E credo sia qui il problema, ovvero che creo un array statico.

Leggevo in giro che consigliano di utilizzare la malloc. Però prima di metterci le mani volevo qualche altro parere, o qualche altro metodo. E Grazie!

10 Risposte

  • Re: Return ArrayLocale

    Devi allocare il nuovo array con la malloc.
  • Re: Return ArrayLocale

    oregon ha scritto:


    Devi allocare il nuovo array con la malloc.
    Capisco. Premesso che non ho mai utilizzato la malloc. Devo effettuare l'allocazione prima di aver creato l'array, o va bene anche dopo?
  • Re: Return ArrayLocale

    Chiariamo un punto ... gli argomenti della funzione che chiami li puoi gestire tu o è determinata dall'esercizio? La grandezza del nuovo array è fissa o dipende dai dati passati alla funzione, quindi da determinare all'interno della funzione?
  • Re: Return ArrayLocale

    oregon ha scritto:


    Chiariamo un punto ... gli argomenti della funzione che chiami li puoi gestire tu o è determinata dall'esercizio? La grandezza del nuovo array è fissa o dipende dai dati passati alla funzione, quindi da determinare all'interno della funzione?
    Gli argomenti sono obbligatoriamente puntatori ad array, e non li conosco a priori. Inoltre la grandezza del nuovo array dipende dai dati passati alla funzione.
  • Re: Return ArrayLocale

    Ok, allora è necessario usare la malloc.

    Un esempio di documentazione è qui

    http://www.cplusplus.com/reference/cstdlib/malloc

    ma trovi milioni di informazioni sulla malloc ...
  • Re: Return ArrayLocale

    oregon ha scritto:


    Ok, allora è necessario usare la malloc.

    Un esempio di documentazione è qui

    http://www.cplusplus.com/reference/cstdlib/malloc

    ma trovi milioni di informazioni sulla malloc ...
    Chiaro. Da come vedo in giro, e su quella documentazione, l'allocazione va fatta sempre prima, e poi la creazione.

    Grazie mille!
  • Re: Return ArrayLocale

    Non capisco quale sia la differenza per te tra "creazione" e "allocazione". Le due cose sono contemporanee.
  • Re: Return ArrayLocale

    NawtFound ha scritto:


    Capisco. Premesso che non ho mai utilizzato la malloc. Devo effettuare l'allocazione prima di aver creato l'array, o va bene anche dopo?
    Concettualmente e' la malloc che crea l'array: piu' specificatamente, con la malloc allochi lo spazio di memoria necessario al tuo array.

    Non c'e' un prima o un dopo.


    Se per creazione intendi l'inizializzazione degli elementi dell'array (NON INIZIALIZZATI dalla malloc), allora, la creazione va fatta dopo.

    In generale, il termine creazione e' sinonimo di allocazione.

    Se si vuole guardare il pelo nell'uovo, la creazione di un oggetto in memoria consiste in due passi:

    1) allocazione della memoria necessaria per contenere le strutture dati di cui l'ogegto e' composto
    2) inizializzazione delle strutture dati, che, per il C++, consisteno nella chiamata del costruttore
  • Re: Return ArrayLocale

    Pensavo di poter creare l'array statico, e poi andarlo a riallocare passo passo con la malloc, ed ottenere quindi una array dinamico.
  • Re: Return ArrayLocale

    No, assolutamente. Niente array statico.

    Allochi l'array con la malloc e se devi fare modifiche alla sua grandezza utilizzi la realloc

    http://www.cplusplus.com/reference/cstdlib/realloc

    Addirittura potresti sempre utilizzare la realloc senza utilizzare la malloc.

    E non dimenticare, nel main, quando l'array non ti servirà più, di liberare la memoria con la free

    http://www.cplusplus.com/reference/cstdlib/free
Devi accedere o registrarti per scrivere nel forum
10 risposte