Si quisiera armar un array, pero sólo utilizando punteros, siendo ésta la función:
void _ingreso(int *Lista, int *Cnt);
En la declaración debería reservar memoria para ingresar un elemento verdad?, entiéndase por esto, malloc(), luego de esto, recién podría leer stdin para asignar el valor leído a un puntero inicial, si no me equivoco.
_____________________________________________________________________________________________________
#include <stdio.h>
/* Posible solución, pero que al colocar el último elemento trae consigo un error */
#define SIZE 10
int main(){
int *lista;
int i;
lista = malloc(sizeof(int)*10);
for(i = 0; i < SIZE; i++){
printf("Ingrese elemento N %d\n",i);
scanf("%d", lista);
*lista++;
}
free(lista);
puts("Terminado");
return 0;
}
{
int *lista;
int i;
lista = (int*)malloc(sizeof(int)*10);
for(i = 0; i < 10; i++)
{
printf("Ingrese elemento N %d\n",i);
scanf("%d", &lista[i]);
printf("puntero a punta a : %p\n", lista);
printf("VALOR DE DICHA DIRECCION de mem: %d\n", lista[i]);
}
free(lista);
puts("Terminado");
return 0;
}
así funciona joya, no se si es de la manera que querías
Saludos
Esta es la forma en que quiero:
#include <stdio.h>
#define SIZE 5
int main(){
int *lista;
int i;
lista = (int*)(malloc(sizeof(int)*6));
*lista = (int)NULL;
for(i = 0; i < SIZE ; i++){
*lista++;
printf("Ingrese elemento N %d\n",i);
scanf("%d", lista);
}
/*free(lista);*/
puts("Terminado");
return 0;
}
Pero:
El compilador lanza el siguiente warning(gcc):
Citargcc v.c
v.c: In function 'main':
v.c:8: warning: incompatible implicit declaration of built-in function 'malloc'
Y luego si compilo el código con free, al final tengo un error de segmentación, a qué se debe?
./a.out
Ingrese elemento N 0
1
Ingrese elemento N 1
2
Ingrese elemento N 2
3
Ingrese elemento N 3
4
Ingrese elemento N 4
5
Fallo de segmentación
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);
scanf("%d", aux);
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
puts("Terminado");
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++]);
free(lista);
puts("\nTerminado");
return 0;
}
void llenar_array(int *ptr_array){
int i;
for(i = 0; i < SIZE ; i++){
printf("Ingrese elemento N %d\n",i);
scanf("%d", ptr_array);
ptr_array++;
}
}