Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Problema con puntatore ad array

    Salve il seguente programmino avrebbe l'intenzione di calcolare le potenze da 0 a 9 di un numero inserito dall'utente... purtroppo ho trovato un problema con l'uso del puntatore ad un array.

    Se leggete un attimo il programmino (o anche se lo compilate qualcosa di strano dovrebbe saltare all'occhio) si può vedere che nella prima printf in cui viene usato il puntatore tutto funziona che è una meraviglia, invece nella printf all'interno del ciclo mi da dei valori strani... ma che ho combinato!

    codice:
    #include <stdio.h>
    #define MAX_AR 10
    int potenze(int);
    
    int main(){
        int i, n;
        int *punt;
    
        printf("Inserisci il numero di cui vuoi fare le potenze\t");
        scanf("%d", &i);
        punt=potenze(i);
        printf("\nCome si nota qui funziona\t%d\n", *(punt+3));
        printf("\nL'array e' costituita da:");
        for(n=0; n<MAX_AR; n++)
        {
            printf("\nQui no...perche'?\t%d", *(punt+n));
        }
        return 0;
    }
    
    int potenze(int valore){
        int array[MAX_AR];
        int k, l, temp;
        for(k=0; k<MAX_AR; k++){
            temp=1;
            if(k>0) for(l=0; l<k; l++)
            {
                temp=temp*valore;
            }
            array[k]=temp;
        }
        return array;
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Due errori *gravi* ...

    1) vorresti restituire dalla funzione l'indirizzo di un array locale alla funzione che, all'uscita, viene distrutto

    2) fra l'altro lo fai restituendo un int (e non un puntatore ad intero), anche se il problema principale è nel punto 1)

    Per rimediare, devi allocare dinamicamente (con malloc) l'array all'interno della funzione e restituire il puntatore ottenuto.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    ok ma allora perchè la prima volta che faccio la printf questa funziona??

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Il risultato di una operazione del genere è imprevedibile ma comunque sbagliato.
    Finché le informazioni rimangono in memoria tutto ti *sembra* andare bene, ma le condizioni della memoria non sono garantite dato che l'array è deallocato.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    ah ok forse sto capendo, quindi in pratica l'array continua ad esistere a quel indirizzo per un tempo inteterminato dopo la sua deallocazione dalla memoria, ma appena il programma richiede un po' più memoria questa viene riutilizzata e quindi per forza i risultati sono casuali...

    potrebbe essere giusta la dinamica dell'accaduto???

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Sì ... corretto.
    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.