En primer lugar debes agregar el include <stdlib.h>
En segundo lugar no puedes incrementar directamente el puntero lista , estarías perdiendo la dirección del primer elemento , para el ejemplo que propones , yo utilizaria un puntero auxiliar que recorriera los elementos de lista, fíjate en los cambios
Como la función malloc devuelve la dirección del principio del bloque de memoria reservado , si haces lista++ estarías perdiendo la dirección de esa parte , por consiguiente , al intentar hacer el free lista apuntaría a la última parte del bloque , estarías intentando liberar un bloque de memoria que no te corresponde , de allí el fallo de segmentación .
#include <stdio.h>
#include <stdlib.h> //esto para que no te de el warning
#define SIZE 5
int main(){
int *lista;
int *aux; //puntero auxiliar
int i;
lista
= (int*)(malloc(sizeof(int)*6)); aux = lista; //auxililar apunta al primer elemento de lista
*lista = (int)NULL;
for(i = 0; i < SIZE ; i++){
// cambio de lugar el incremento , de esa manera tambien rellenas el elemento 0
printf("Ingrese elemento N %d\n",i
); aux++; // incrementamos auxiliar
}
// en este punto lista ya tiene información
//con esto muestras la informacion en lista
int cont = 0;
printf("\nInformación en lista "); while (cont
< SIZE
) printf("\n%d", lista
[cont
++]);
free(lista
); //liberamos lo que habiamos reservado return 0;
}
ahora que si lo haces dentro de una función , no necesitas ningún puntero auxiliar
#include <stdio.h>
#include <stdlib.h>
#define SIZE 5
void llenar_array(int *ptr_array);
int main(){
int *lista;
lista
= (int*)(malloc(sizeof(int)*6));
llenar_array(lista);
//con esto muestras la informacion en lista
int cont = 0;
printf("\nInformación en lista "); while (cont
< SIZE
) printf("\n%d", lista
[cont
++]);
return 0;
}
void llenar_array(int *ptr_array){
int i;
for(i = 0; i < SIZE ; i++){
printf("Ingrese elemento N %d\n",i
); ptr_array++;
}
}