Quote Originariamente inviata da Scara95 Visualizza il messaggio
Sappi che questo è il modo meno efficiente in assoluto, ad ogni modo ecco il codice corretto e commentato
codice:
#include <stdio.h>
#include <stdlib.h>
//non esiste malloc.h


//quel void e' buona prassi, ma la questione e' complicata.
int* leggi(void)
{
    int *array, n, i;




    i=0;
    array = NULL;
    //array=(int*)malloc(sizeof(int)*i);
    //non e' necessario allocare spazio iniziale
    //in ogni caso non allocheresti nulla in quanto i=0;
    
    //i++;
    //non ci sono elementi, lascia i a 0
    
    //scanf("%d", array);
    //non ha minimamente senso, pensa a quello che fai!!!


    do{
        scanf("%d", &n);
        ++i; //ti serve un elemento
        //realloc prende come primo parametro l'oggetto da reallocare
        array = (int)realloc(array, sizeof(int)*i);
        //imposti l'ultimo elemento a quello letto
        //N.B. Puoi usare la sintassi degli array, documentati sul rapporto puntatori-array
        array[i-1] = n;        
    } while(n!=-99);
    
    //prima era totalmente scorretto.
    return array;
}




int main (int argc, char*argv[])
{
    int *a;
    //devi salvare il valore da qualche parte
    a = leggi();
    
    //stampiamo giusto per conferma
    int i = 0;
    while(a[i] != -99) {
        printf("%d ", a[i]);
        ++i;
    }
    puts("");


    //devi liberare la memoria allocata dinamicamente
    free(a);
    return 0;
}
Grazie mille, so che è il metodo peggiore per risolvere l'esercizio, mi serviva proprio per capire bene malloc e realloc. Vedo adesso le risposte, grazie ancora