Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Akkon en 30 Abril 2011, 14:03 pm



Título: Asignación de memoria en C
Publicado por: Akkon en 30 Abril 2011, 14:03 pm
Hola. Soy nuevo en el foro así que disculpad si este no es el lugar indicado para mi duda.

El caso es que estoy desarrollando un programa en C en el que llevo trabajando meses y estoy teniendo un Segmentation fault muy molesto.

Con respecto a esto tenía la duda sobre si existe una máxima memoria que se pueda utilizar durante la ejecución del programa impuesta por el compilador o el sistema operativo y si hay alguna manera de aumentar esto.
Programo en Linux (ahora mismo Mint) y uso compiladores GCC o ICC.

Un saludo.


Título: Re: Asignación de memoria en C
Publicado por: satu en 30 Abril 2011, 14:36 pm
Hola y bienvenid@ al Foro

El segmentation fault casi seguro que te sale porque estás accediendo a una zona de memoria que no has reservado, porque eso de un máximo de memoria creo que el límite es tu ram, revisa el código y haz una traza para asegurarte de que no utilizas alguna variable a la que no le has reservado memoria.

Espero haberte sido de ayuda.

Saludos


Título: Re: Asignación de memoria en C
Publicado por: Akai en 30 Abril 2011, 14:51 pm
en 32 bits, en principio puedes tener problemas al reservar X cantidades.

Por otro lado, si estás en linux, el uso de debuggers como gdb, o herramientas como valgrind te pueden ayudar a encontrar el problema de una forma rápida y eficaz (sobretodo valgrind que te avisa de cualquier posible salto a una dirección no inicializada o erronea, memory leaks y seg faults).


Título: Re: Asignación de memoria en C
Publicado por: Akkon en 30 Abril 2011, 15:22 pm
Muchas gracias a los dos por responder.

La cuestión es que mi programa es básicamente una simulación (que tengo implementada en una librería) y el programa principal es un barrido en dos parámetros. Tuve mucho cuidado en liberar toda la memoria que había asignado dinámicamente en la librería y de cerrar todos los archivos, al menos eso creo.

Encontré una función por internet que me calcula la memoria usada por el programa y lo que me extraña es que ésta va subiendo a escalones. Durante una serie de pasos  se mantiene constante pero en un paso aumenta. El máximo que me alcanza son unos 7 Mb lejos de los 4 Gb que tengo, por eso era mi duda si el compilador asignaba un máximo de uso.

Ahora estoy ejecutándolo con gdb. Traté de hacerlo con valgrind pero no entendía mucho sus mensajes.