
Originariamente inviata da
Scara95
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;
}