Autor
|
Tema: Error en malloc() (Leído 5,823 veces)
|
soyloqbuskas
Desconectado
Mensajes: 219
¡El conocimiento es de todos!
|
¡Buenas a todos! Tengo un problema con la funcion malloc() porque me da fallo de segmentacion....el codigo es como este... char* funcion(int sizeMalloc){ char* buffer =(char*)malloc(sizeMalloc ) return buffer; }
El error que me da es este: 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: (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
|
Te falta el punto y coma ( ; ) char* funcion(int sizeMalloc){ char* buffer =(char*)malloc(sizeMalloc ); return buffer; }
|
|
|
En línea
|
|
|
|
soyloqbuskas
Desconectado
Mensajes: 219
¡El conocimiento es de todos!
|
Eso es porque he copiado mal.... El codigo es: char* funcion(int sizeMalloc){ char* buffer =(char*)malloc(sizeMalloc ); return buffer; }
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
Mensajes: 7
[SK-DOOM] MikeMonoStone
|
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
|
Si lo que quieres es reservar sizeMalloc espacios de char, debes hacer esto: char* funcion(int sizeMalloc){ char* buffer =(char*)malloc(sizeMalloc * sizeof(char)); return buffer; }
Un saludo.
|
|
|
En línea
|
|
|
|
0xDani
Desconectado
Mensajes: 1.077
|
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
Mensajes: 1.639
|
Si lo que quieres es reservar sizeMalloc espacios de char, debes hacer esto: char* funcion(int sizeMalloc){ char* buffer =(char*)malloc(sizeMalloc * sizeof(char)); return buffer; }
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: char *funcion(int sizeMalloc) { }
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
Mensajes: 219
¡El conocimiento es de todos!
|
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
Mensajes: 2.407
Deprecated
|
A ver ... 1) Por favor, si tenés una función que tiene la funcionalidad de malloc(), podrías hacer algo como esto: C void* Alloc(size_t stringSize) { void* stringMemory = malloc(stringSize ); 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 */ return stringMemory; }
C++ template <typename T> T* Alloc(std::size_t memorySize) { T* reservedMemory; try { reservedMemory = (T*) new char[memorySize]; } catch (std::exception& mExcept) { std::cerr << "strAlloc() failed // " << mExcept.what() << std::endl; // Aca deberia ir un codigo que maneje de manera agraciada la falta de memoria } return reservedMemory; }
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 ValgrindSaludos. 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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Malloc ...
« 1 2 »
Programación C/C++
|
roser24
|
14
|
8,115
|
5 Mayo 2010, 21:15 pm
por Akai
|
|
|
Ayuda con el uso de malloc
Programación C/C++
|
alexis33de
|
2
|
4,251
|
21 Agosto 2010, 23:18 pm
por alexis33de
|
|
|
Malloc y array ??
Programación C/C++
|
<<<-Basura->>>
|
2
|
3,632
|
4 Octubre 2011, 15:19 pm
por LearningSpanishProgrammer
|
|
|
Dudas con malloc...
Programación C/C++
|
Metal-byte
|
2
|
2,360
|
1 Enero 2012, 16:15 pm
por Metal-byte
|
|
|
¿Duda sobre malloc en C?
Programación C/C++
|
D4P50N
|
2
|
2,496
|
20 Noviembre 2012, 00:15 am
por D4P50N
|
|