| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
jabar
Registrado: 20 Ene 2014 Mensajes: 5
| Publicado: 22/01/2014 6:42 pm | | | Título: malloc no genera error esperado |
| Hola que tal a todos, estoy aprendiendo a usar la asignación de memoria dinámica en C, he realizado un pequeño código para ver como funciona esto, al parecer todo va bien excepto cuando modifico el código para que el compilador me de un error y poder ver los limites de la función malloc, el problema es que no me da error.
El error que espero es: Violación de segmento (`core' generado) o de ese tipo, el código es:
| Código: | 1 #include<stdio.h> 2 #include<stdlib.h> 3 4 int main(void) 5 { 6 int i; 7 int *p1 = NULL; 8 9 p1 = (int*)malloc(5*sizeof(int)); //reservo 5 espacios de tipo entero 10 11 if(p1 == NULL)printf("No se pudo asignar memoria\n"); 12 13 for(i = 0 ; i <= 15 ; i++) // asigno 15 valores a un vector de 5 espacios 14 { 15 *(p1+i) = (i+1); 16 printf("%d\n",*(p1+i)); 17 } 18 19 return 0; 20 }
|
Como pueden ver, en la linea 9 reservo memoria dinámica para un vector de 5 elementos pero en la 13 introduzco 15 valores al mismo vector, por lo que espero que el compilador me arroje un error por violación de segmento, ya que según estoy escribiendo en un lugar indefinido ¿no?. La cosa es que compila sin error, la salida es una lista de números del 1 al 16.
Uso el compilador gcc en Ubuntu.
Otra cosa de la que me acabo de dar cuenta, olvide liberar la memoria, lo corregí, le puse free(p1) al final, compilo bien, pero cuando lo ejecuté me ah salido un lió de errores, algo como:
| Código: | *** Error in `./malloc1': free(): invalid next size (fast): 0x0000000001484010 *** ======= Backtrace: ========= /lib/x86_64-linux-gnu/libc.so.6(+0x80996)[0x7f1fdcc87996] ./malloc1[0x40069e] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5)[0x7f1fdcc28de5] ./malloc1[0x400549] ======= Memory map: ======== 00400000-00401000 r-xp 00000000 00:18 3410154 /home/jaime/jabar/P/malloc/malloc1 00600000-00601000 r--p 00000000 00:18 3410154 /home/jaime/jabar/P/malloc/malloc1
|
Muchas gracias por sus respuestas. |
| | Volver arriba | |  | dehm
Registrado: 29 Abr 2011 Mensajes: 143
| Publicado: 23/01/2014 2:16 am | | | Título: |
| Creo (y espero que alguien que sepa de verdad lo confirme o aclare las causas verdaderas) que no tienes error porque el compilador no analiza los errores que se pueden manifestar en tiempo de ejecución.
Sintácticamente tu código está bien, por lo que no genera errores de compilación.
Otra cosa es que luego, en ejecución, el puntero intente acceder a memoria no asignada previamente, por lo que puede pasar cualquier cosa.
Es como cuando defines un array con N elementos, y luego intentas acceder a un índice superior a N. No tendrás problema compilando, pero en la ejecución la cosa falla.
Igualmente, al intentar liberar memoria que "no es tuya" , ya que no la tenías asignada, el programa igualmente genera un error. _________________ Aprendiendo |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |