elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Error en malloc()
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Error en malloc()  (Leído 5,257 veces)
soyloqbuskas

Desconectado Desconectado

Mensajes: 218


¡El conocimiento es de todos!


Ver Perfil
Error en malloc()
« en: 9 Noviembre 2012, 03:39 am »

¡Buenas a todos!

Tengo un problema con la funcion malloc() porque me da fallo de segmentacion....el codigo es como este...
Código
  1.  
  2. char* funcion(int sizeMalloc){
  3.     char* buffer=(char*)malloc(sizeMalloc)
  4.     return buffer;
  5. }

El error que me da es este:
Citar
malloc.c:2451: sYSMALLOc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)' failed

Y la pila es esta:
Citar
(gdb) bt
#0  0x00132416 in __kernel_vsyscall ()
#1  0x001611df in __GI_raise (sig=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
#2  0x00164825 in __GI_abort () at abort.c:91
#3  0x001a8469 in __malloc_assert (assertion=<optimized out>, file=<optimized out>, line=2451, function=0x29518a "sYSMALLOc") at malloc.c:300
#4  0x001ab293 in sYSMALLOc (av=0x2d9440, nb=40) at malloc.c:2448
#5  _int_malloc (av=0x2d9440, bytes=35) at malloc.c:3892
#6  0x001acddc in __GI___libc_malloc (bytes=35) at malloc.c:2924

¿Cual es el problema? ¿Como lo soluciono?

Gracias, un saludo.


En línea

"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw
naderST


Desconectado Desconectado

Mensajes: 625



Ver Perfil WWW
Re: Error en malloc()
« Respuesta #1 en: 9 Noviembre 2012, 03:44 am »

Te falta el punto y coma ( ; )

Código
  1. char* funcion(int sizeMalloc){
  2.     char* buffer=(char*)malloc(sizeMalloc);
  3.     return buffer;
  4. }
  5.  


En línea

soyloqbuskas

Desconectado Desconectado

Mensajes: 218


¡El conocimiento es de todos!


Ver Perfil
Re: Error en malloc()
« Respuesta #2 en: 9 Noviembre 2012, 03:54 am »

Eso es porque he copiado mal....
El codigo es:
Código
  1. char* funcion(int sizeMalloc){
  2.     char* buffer=(char*)malloc(sizeMalloc);
  3.     return buffer;
  4. }
  5.  

Y mi error no es de compilacion es un fallo de segmentacion....Estoy debugeando el programa porque los malloc() en general me dan este error y no se porque....

¿Alguien sabe sobre bugs del malloc() o de alguna funcion que me permita reservar memoria y que no de errores?

Gracias, un saludo.
En línea

"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw
MikeMonostone

Desconectado Desconectado

Mensajes: 7


[SK-DOOM] MikeMonoStone


Ver Perfil WWW
Re: Error en malloc()
« Respuesta #3 en: 9 Noviembre 2012, 14:38 pm »

Si lo que intentas es asignar dinamicamente memoria y estas en C++ puedes usar new y delete, no¿?
En línea

[SK-DOOM] Pensé que lo que haría sería fingir ser uno de esos sordomudos.
DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Error en malloc()
« Respuesta #4 en: 9 Noviembre 2012, 15:18 pm »

Si lo que quieres es reservar sizeMalloc espacios de char, debes hacer esto:

Código
  1. char* funcion(int sizeMalloc){
  2.     char* buffer=(char*)malloc(sizeMalloc * sizeof(char));
  3.     return buffer;
  4. }

Un saludo.
En línea

0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: Error en malloc()
« Respuesta #5 en: 9 Noviembre 2012, 15:39 pm »

Y ese es todo el codigo? Quiza el error esta en otro sitio. O a lo mejor estas intentando reservar demasiada memoria, comprueba que malloc() no este retornando NULL.
En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Error en malloc()
« Respuesta #6 en: 9 Noviembre 2012, 15:48 pm »

Si lo que quieres es reservar sizeMalloc espacios de char, debes hacer esto:

Código
  1. char* funcion(int sizeMalloc){
  2.     char* buffer=(char*)malloc(sizeMalloc * sizeof(char));
  3.     return buffer;
  4. }
Es valido pero innecesario. Ya que tanto la conversión explicita como el tamaño del objeto ("sizeof(char)" siempre es igual a uno) se pueden eliminar la función se reduce a:
Código
  1. char *funcion(int sizeMalloc)
  2. {
  3.   return malloc(sizeMalloc);
  4. }
Considerando que no hay ningún proceso adicional seria mejor llamar a "malloc" directamente.

Tengo un problema con la funcion malloc() porque me da fallo de segmentacion....el codigo es como este...
Solo con el código fuente de la función no es posible indicarte la causa del problema que mencionas y te puedo asegurar que, salvo un caso excepcional, el error esta en otro lugar.

Lo recomendado en un caso como este es publicar el programa mas pequeño posible que exhiba el problema, en base a el ya podemos buscar que esta mal.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
soyloqbuskas

Desconectado Desconectado

Mensajes: 218


¡El conocimiento es de todos!


Ver Perfil
Re: Error en malloc()
« Respuesta #7 en: 10 Noviembre 2012, 05:24 am »

Creo que ya se el problema....mi funcion que crea el malloc() es llamada por un bucle infinito....y aun que en el bucle hago el free() del malloc()....el hacer muchos malloc() y free() debe de dar problema....Por lo que he leido....(no se si me he enterado bien, estaba la info en ingles...) hacer un malloc() hace reserva dinamica de la memoria pero ha veces esa reserva la intenta hacer sobre direcciones de memoria no permitidas.....y si hago malloc() dentro de un bucle infinito, solo es cuestion de tiempo que acabe intentando reservar memoria en una zona no permitia por el SO.....lo que voy a probar es a hacer el malloc() fuera del bucle y parsarle la varible con el malloc() a la funcion que lo usa....Seguramente asi lo solucione.....
En línea

"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw
Foxy Rider


Desconectado Desconectado

Mensajes: 2.407


Deprecated


Ver Perfil WWW
Re: Error en malloc()
« Respuesta #8 en: 11 Noviembre 2012, 20:18 pm »

A ver ...

1) Por favor, si tenés una función que tiene la funcionalidad de malloc(), podrías hacer algo como esto:

C
Código
  1. void* Alloc(size_t stringSize)
  2. {
  3.        void* stringMemory = malloc(stringSize);
  4.                if (!stringMemory) fprintf(stderr,"strAlloc() failed !!! malloc returned nullptr  \r\n"); /* Aca deberia ir un codigo que maneje de manera agraciada la falta de memoria */
  5.  
  6.        return stringMemory;
  7. }
  8.  
  9.  

C++
Código
  1. template <typename T>
  2. T* Alloc(std::size_t memorySize)
  3.  
  4. {
  5.        T* reservedMemory;
  6.  
  7.        try
  8.        {
  9.                reservedMemory = (T*) new char[memorySize];
  10.        }
  11.        catch (std::exception& mExcept)
  12.        {
  13.                 std::cerr << "strAlloc() failed // " << mExcept.what() << std::endl; // Aca deberia ir un codigo que maneje de manera agraciada la falta de memoria
  14.        }
  15.  
  16.        return reservedMemory;
  17. }
  18.  
  19.  
  20.  
  21.  

Verificá siempre el retorno del pedido de memoria ... salvo que hablemos de algo despreciable

2) Si te interesa saber sobre problemáticas de memoria de tu aplicación, te aconsejo ver alguna aplicación como Valgrind

Saludos.

P.S//Edit → Recién me avivo de que al código en "C" le puse "string" (por que era char* el tipo) a las variables, pero que después dije "screw this" y le mandé un void y no renombré ... same thing lol
« Última modificación: 12 Noviembre 2012, 10:45 am por Alex Mtx » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Malloc ... « 1 2 »
Programación C/C++
roser24 14 6,840 Último mensaje 5 Mayo 2010, 21:15 pm
por Akai
Ayuda con el uso de malloc
Programación C/C++
alexis33de 2 3,847 Último mensaje 21 Agosto 2010, 23:18 pm
por alexis33de
Malloc y array ??
Programación C/C++
<<<-Basura->>> 2 3,213 Último mensaje 4 Octubre 2011, 15:19 pm
por LearningSpanishProgrammer
Dudas con malloc...
Programación C/C++
Metal-byte 2 2,026 Último mensaje 1 Enero 2012, 16:15 pm
por Metal-byte
¿Duda sobre malloc en C?
Programación C/C++
D4P50N 2 2,128 Último mensaje 20 Noviembre 2012, 00:15 am
por D4P50N
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines