Título: [C] - Armado de un array
Publicado por: h0oke en 17 Mayo 2010, 13:48 pm
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 ); *lista++; } return 0; }
Título: Re: [C] - Armado de un array
Publicado por: nicolasblues86 en 17 Mayo 2010, 17:11 pm
{ int *lista; int i; lista = (int*)malloc(sizeof(int)*10); for(i = 0; i < 10; i++) { printf("Ingrese elemento N %d\n",i ); printf("puntero a punta a : %p\n", lista ); printf("VALOR DE DICHA DIRECCION de mem: %d\n", lista [i ]); } return 0; }
así funciona joya, no se si es de la manera que querías Saludos
Título: Re: [C] - Armado de un array
Publicado por: h0oke en 18 Mayo 2010, 12:47 pm
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 ); } /*free(lista);*/ return 0; }
Pero: El compilador lanza el siguiente warning(gcc): gcc 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
Título: Re: [C] - Armado de un array
Publicado por: Gallu en 18 Mayo 2010, 15:26 pm
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++; } }
|