• Jueves 14 de Noviembre de 2024, 04:33

Autor Tema:  tiny_malloc error? Agradecería mucho la ayudita :(  (Leído 2202 veces)

Phass

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
tiny_malloc error? Agradecería mucho la ayudita :(
« en: Jueves 30 de Diciembre de 2010, 14:55 »
0
Hola !! He intentando ejecutar mi proyecto fin de carrera y me he encontrado en que en varias de esas ejecuciones me sale este error de "tiny_malloc..." y no tengo ni idea de por qué puede ser por más vueltas que le doy...

Código: C++
  1. (gdb) bt
  2. #0 0x93992338 in tiny_malloc_from_free_list ()
  3. #1 0x9398b1cd in szone_malloc ()
  4. #2 0x9398b0d8 in malloc_zone_malloc ()
  5. #3 0x9398b06c in malloc ()
  6. #4 0x90b27598 in operator new ()
  7. #5 0x0000bd48 in __gnu_cxx::new_allocator<unsigned long>::allocate ()
  8. #6 0x0000bd72 in std::_Bvector_base<std::allocator<bool> >::_M_allocate ()
  9. #7 0x0000dbe8 in std::vector<bool, std::allocator<bool> >::_M_insert_aux ()
  10. #8 0x0000dd95 in std::vector<bool, std::allocator<bool> >::push_back ()
  11. #9 0x00003618 in Poblacion::Cruce_uniforme ()
  12. #10 0x000060db in Algoritmo::Algoritmo ()
  13. #11 0x00006c89 in Algoritmo::Algoritmo ()
  14. #12 0x00008f7a in main ()
  15.  
  16.  

Alguien tiene idea? La verdad es que os agradecería mucho la ayuda ya que en teoría mi proyecto está finalizado, pero si me ocurre esto en algunas ejecuciones no puedo experimentar...

Muchas gracias a todos como siempre

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: tiny_malloc error? Agradecería mucho la ayudita :(
« Respuesta #1 en: Jueves 30 de Diciembre de 2010, 15:13 »
0
A lo mejor algunos somos programadores, pero no adivinos (por lo menos que yo sepa)  :lol:

Deberías poner en qué parte del código te saltan esos errores. Igualmente a primera vista parece algo de falta de memoria, aunque sin más detalles es imposible de saber.

Saludos

Phass

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: tiny_malloc error? Agradecería mucho la ayudita :(
« Respuesta #2 en: Jueves 30 de Diciembre de 2010, 15:27 »
0
Bueno cabe decir que ese error me sale también en otras partes del proyecto, pero la función donde sale éste es la sguiente:


Código: C++
  1. void Poblacion :: Cruce_uniforme (Individuo & padre1, Individuo & padre2,
  2.                                              Individuo & hijo1, Individuo & hijo2)
  3. {
  4.     // Lo primero de todo sera generar dos mascaras aleatorias, una para los
  5.     // parametros booleanos y otro para los reales
  6.     vector<bool> mascara_booleana (0);
  7.     vector<bool> mascara_reales (0);
  8.    
  9.     for (int i = 0; i < padre1.operacion_escalar.size(); i++)
  10.     {
  11.         float b = padre1.Numeros_Aleatorios_Entre_a_y_b (0, 1);
  12.         if (b >= 0.5)
  13.             mascara_booleana.push_back(1);
  14.         else
  15.             mascara_booleana.push_back(0);
  16.     }
  17.    
  18.     for (int i = 0; i < padre1.parametros_reales.size(); i++)
  19.     {
  20.         float b = padre1.Numeros_Aleatorios_Entre_a_y_b (0, 1);
  21.         if (b >= 0.5)
  22.             mascara_reales.push_back(1);
  23.         else
  24.             mascara_reales.push_back(0);
  25.     }
  26.    
  27.     // En este punto se tienen generadas de forma aleatoria unas mascaras que seran
  28.     // distintas para cada cruce.
  29.    
  30.     /* La politica de cruce a uilizar sera la siguiente:
  31.    
  32.             Si 1 en Mascara -> Parametro del padre1 para el hijo1
  33.             Si 0 en Mascara -> Parametro del padre2 para el hijo1
  34.            
  35.             Si 1 en Mascara -> Parametro del padre2 para el hijo2
  36.             Si 0 en Mascara -> Parametro del padre1 para el hijo2
  37.     */
  38.    
  39.     // Aplicamos el cruce selectivo con la politica anterior para crear el hijo1 y
  40.     // el hijo 2
  41.     for (int i = 0; i < mascara_booleana.size(); i++)
  42.     {
  43.         if (mascara_booleana[i] == 1)
  44.         {
  45.             hijo1.operacion_escalar.push_back (padre1.operacion_escalar[i]);
  46.             hijo2.operacion_escalar.push_back (padre2.operacion_escalar[i]);
  47.  
  48.         }
  49.         else
  50.         {
  51.             hijo1.operacion_escalar.push_back (padre2.operacion_escalar[i]);
  52.             hijo2.operacion_escalar.push_back (padre1.operacion_escalar[i]);
  53.  
  54.         }
  55.     }
  56.  
  57.     for (int i = 0; i < mascara_reales.size(); i++)
  58.     {
  59.         if (mascara_reales[i] == 1)
  60.         {
  61.             hijo1.parametros_reales.push_back (padre1.parametros_reales[i]);
  62.             hijo2.parametros_reales.push_back (padre2.parametros_reales[i]);
  63.         }
  64.         else
  65.         {
  66.             hijo1.parametros_reales.push_back (padre2.parametros_reales[i]);
  67.             hijo2.parametros_reales.push_back (padre1.parametros_reales[i]);
  68.         }
  69.     }
  70. }
  71.  
  72.  

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: tiny_malloc error? Agradecería mucho la ayudita :(
« Respuesta #3 en: Jueves 30 de Diciembre de 2010, 20:32 »
0
¿Y dónde exactamente en dicho método?

Phass

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: tiny_malloc error? Agradecería mucho la ayudita :(
« Respuesta #4 en: Jueves 30 de Diciembre de 2010, 21:01 »
0
No tengo ni idea, es solo el error que produce el depurador... me han dicho por ahí que puede que sea problema del kernel de Mac Os a la hora de asignar memoria... pero buf, ni idea.... :(

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: tiny_malloc error? Agradecería mucho la ayudita :(
« Respuesta #5 en: Jueves 30 de Diciembre de 2010, 22:13 »
0
Dudo mucho que sea un error del kernel. Depúralo y así ves dónde ocurre exactamente.

Un saludo.

Phass

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: tiny_malloc error? Agradecería mucho la ayudita :(
« Respuesta #6 en: Jueves 30 de Diciembre de 2010, 22:25 »
0
Eso que puse al principio ya es la depuración del gdb... no muestra nada mas

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: tiny_malloc error? Agradecería mucho la ayudita :(
« Respuesta #7 en: Viernes 31 de Diciembre de 2010, 01:18 »
0
Me refiero a que lo ejecutes paso a paso y enlazar el fuente para que vayas viendo justo donde pasa. Hay muchas formas de depurar  ^_^

Phass

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: tiny_malloc error? Agradecería mucho la ayudita :(
« Respuesta #8 en: Viernes 31 de Diciembre de 2010, 01:28 »
0
y cómo hago eso? ya se me escapa... jeje gracias

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: tiny_malloc error? Agradecería mucho la ayudita :(
« Respuesta #9 en: Viernes 31 de Diciembre de 2010, 01:47 »
0
Lo siento, pero ahora mismo no tengo tiempo para escribir un tutorial sobre GDB. Puedes consultar el mismo manual de GDB o tu amigo Google  ;)

Phass

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: tiny_malloc error? Agradecería mucho la ayudita :(
« Respuesta #10 en: Viernes 31 de Diciembre de 2010, 12:30 »
0
A ver he estado toda la noche sin dormir intentando depurar y parece que ahora el unico error que me sale es el siguiente:

Código: C++
  1. #0  0x93992338 in tiny_malloc_from_free_list ()
  2. #1  0x9398b1cd in szone_malloc ()
  3. #2  0x9398b0d8 in malloc_zone_malloc ()
  4. #3  0x9398b06c in malloc ()
  5. #4  0x90b27598 in operator new ()
  6. #5  0x0000b828 in __gnu_cxx::new_allocator<unsigned long>::allocate (this=0xbffff4d4, __n=1) at ext/new_allocator.h:88
  7. #6  0x0000b852 in std::_Bvector_base<std::allocator<bool> >::_M_allocate (this=0xbffff4d4, __n=6) at stl_bvector.h:389
  8. #7  0x0000b86c in std::vector<bool, std::allocator<bool> >::_M_initialize (this=0xbffff4d4, __n=6) at stl_bvector.h:468
  9. #8  0x0000bafd in std::vector<bool, std::allocator<bool> >::operator= (this=0xbffff4d4, __x=@0x802750) at stl_bvector.h:707
  10. [b]#9  0x000048a9 in Individuo::Individuo (this=0xbffff4d4, rhs=@0x802750) at Individuo.H:171
  11. #10 0x0000492a in Individuo::Individuo (this=0xbffff4d4, rhs=@0x802750) at Individuo.H:174[/b]
  12. #11 0x000055f9 in Algoritmo::Algoritmo (this=0xbffff8c4, var=2, ops_L=6, pob=50, inf=-1, sup=1, fich=@0xbffff94c, sel=1, cru=3, mut=1, rep=1, pc=0.899999976, pm=0.100000001, tp=10000, el=1) at Algoritmo.H:287
  13. #12 0x000064cf in Algoritmo::Algoritmo (this=0xbffff8c4, var=2, ops_L=6, pob=50, inf=-1, sup=1, fich=@0xbffff94c, sel=1, cru=3, mut=1, rep=1, pc=0.899999976, pm=0.100000001, tp=10000, el=1) at Algoritmo.H:495
  14. #13 0x000087d1 in main () at main_con_SLP_punto_H.cpp:308
  15.  

Parece problema de Individuo::Individuo (this=0xbffff4d4, rhs=@0x802750) at Individuo.H y la funcion es :

Código: C++
  1. Individuo :: Individuo (const Individuo & rhs)
  2. {
  3.     tamanio = rhs.tamanio;
  4.     max_operations_L = rhs.max_operations_L;
  5.     limite_inferior = rhs.limite_inferior;
  6.     limite_superior = rhs.limite_superior;
  7.     fitness = rhs.fitness;
  8.     operacion_escalar.resize(0); -> line 170
  9.     operacion_escalar = rhs.operacion_escalar;
  10.     parametros_reales.resize(0);
  11.     parametros_reales = rhs.parametros_reales; -> line 173
  12. }
  13.  

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: tiny_malloc error? Agradecería mucho la ayudita :(
« Respuesta #11 en: Sábado 1 de Enero de 2011, 19:58 »
0
¿Ése es el constructor de la clase Individuo pero recibe un puntero a un objeto Individuo? ¿Y cómo creas un objeto Individuo en el primer momento? Aparte, te aconsejo que siempre que pases punteros a métodos, compruebes si es un puntero válido (no nulo).

Aparte, está claro que tu problema es de alocación de memoria. ¿Has comprobado si hay memoria disponible para crear este nuevo objeto?

Saludos