• Martes 12 de Noviembre de 2024, 21:05

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - skymir

Páginas: [1]
1
C/C++ / Re: Error en el Bus!!
« en: Lunes 3 de Enero de 2011, 19:51 »
Comprendo lo que me dices, pero tu estas suponiendo que trabaje con las palabras a nivel de bits, y lo que yo estoy haciendo es que cada 4 posiciónes de memoria sea un bit debido a que uso variable tipo int, es decir imaginemos que tal como tu has supuesto n=8 y K=10, entonces por ejemplo si guardo cada una de las palabras en un array tipo int, cada posicion del array sería para mi un bit con lo que debería de tener arrays de tipo int de tamaño 2^10*n que traducido a memoria seria una reserva de 2^10*n*sizeof(int).

 Ya se que de esta forma estoy despreciando una enorme cantidad de memoria pero para la funcion que tiene que realizar el programa me vale este metodo ya que los K a tratar no serían muy elevados.
 El fallo que tengo que resolver es el de porque cuando intento reservar un tamaño de memoria concreto el programa no es capaz de hacerlo; cosa evidente debido al limite de memoria que pueda tener el ordenador, y cuando intento reservar un tamaño mayor que el anterior si es capaz de hacerlo y mas adelante me salta un fallo de segmentacion.

2
C/C++ / Re: Error en el Bus!!
« en: Sábado 1 de Enero de 2011, 20:45 »
Lo de reservar esa cantidad de memoria es porque tengo que generar 2^k palabras de tamaño n, es decir de n bits cada una y necesito tenerlas todas a mano durante la ejecucion del programa. Había probado ha guardarlas todas en un fichero pero esto hacía al programa muy lento y por eso opte por la opción de guardarlas en memoria.

3
C/C++ / Re: Error en el Bus!!
« en: Viernes 31 de Diciembre de 2010, 13:13 »
Gracias por responderme,
 
He probado con lo que me has dicho pero sigo teniendo errores al ejecutar el programa. El problema creo que se localiza aqui:

 long int pot=(long int)pow(2,(double)k);
buffer=(int *)malloc((int)pot*n*sizeof(int));      

    if ((buffer==NULL))                            //si no hay memoria libre devuelve NULL
     {
        printf ("nNo hay memoria buffer");
        exit(1);
     }

Lo que sucede es que cuando le meto como parámetro un valor de K=[1 22] el programa hace su funcion, cuando K=[23 29] el programa no es capaz de reservar la memoria que se le debería asignar a buffer, pero en teoria el funcionamiento sería correcto. El fallo viene cuando K>30 que en teoria si para K mallores que 23 no fue capaz de resevar memoria, para k>30 tampoco deberia de ser capaz y el programa deberia de finalizarse (ejecutandose el if), pero por el contrario lo que me muestra es un error de segmentacion. Es como si se saltase la condicion.
¿Hay alguna manera de conocer el tamaño máximo de memoria que se pueda reservar en un determinado ordenador y tiene sentido que no sea capaz de reservarme memoria de un cierto tamaño y si lo sea para un tamaño mallor?

Saludos y gracias!! :)
 


     }

4
C/C++ / Re: Error en el Bus!!
« en: Martes 28 de Diciembre de 2010, 10:07 »
Gracias por contestar, lo que dices es correcto, uso el gcc y lo de cambiar el tipo de dato de int a unsigned long lo habia probado y eso me ha solucionado el tema del error de bus que me daba. El problema que tengo ahora a raiz del mismo es que el programa debe simular el paso de una cierta cantidad de datos(señales) a traves de un canal, siendo este canal no ideal, es decir, metera errores en la señal transmitida y este detalle de introducir errores tengo que hacerlo aleatoriamente atendiendoa una probabilidad de error de bit. Aqui está el problema ya que la variable pot de antes es la que me dice el numero de señales de la que va a constar mi programa y despues debe elegir una de ellas de forma aleatoria y claro hasta ahora estaba empleando la funcion rand() pero me he dado cuenta de que para valores elevados de pot, este me cae fuera del rango de la funcion RAND_MAX. Hay alguna forma de poder cambiar este valor, es decir aumentarlo atendiendo a las necesidades de mi programa u otra funcion que pueda usar?

5
C/C++ / Error en el Bus!!
« en: Lunes 27 de Diciembre de 2010, 12:04 »
Hola, tengo un problema con un programa que estoy realizando, en el cual me salta un error en el bus cuando le introduzco unos datos determinados. El problema en el codigo se produce(en mi opinion aqui):

 int pot=(int)pow(2,(double)k);
 int *buffer;                      
 buffer=(int *)malloc(pot*n*sizeof(int));
 if ((buffer==NULL))                            //si no hay memoria libre devuelve NULL

     {
        printf ("nNo hay memoria buffer");
        exit(1);
     }

Al programa en cuestion se le meten unos datos por linea de comandos y el fallo me surge cuando la variable k toma valores de 25 hacia arriba. Supongo que esto será devido a que si K toma valores altos la variable pot tomara valores aun mas elevados y la cantidad memoria a reservar será elevada (supongamos n=100). Lo raro es que cuando lanzo el programa si este no fuera capaz de reservar dicha cantidad de memoria deberia de saltar al if que tiene a continuación, cosa que no hace ya que el programa se sigue ejecutando y lineas mas abajo me lanza un ERROR EN EL BUS. Lo que tengo claro es que el error viene determinado por el valor de la variable K.
Estoy utilizando el compilador g++ de Linux por si sirve de ayuda.

Un saludo y gracias!!

Páginas: [1]