Estoy implementando un algoritmo polinomial de división y conquista para poder compararlo con una implementación de OpenCL, pero no puedo hacer que malloc
funcione. Cuando ejecuto el programa, asigna un montón de cosas, comprueba algunas cosas y luego envía el size/2
al algoritmo. Luego, cuando llegué a la línea malloc
nuevo escupe esto:¿Por qué obtengo una falla de aserción C malloc?
malloc.c: 3096: sYSMALLOc: `aserción (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) -> tamaño & 0x1) & & ((unsigned long) old_end & pagemask) == 0)' fracasado. Aborted
La línea en cuestión es:
int *mult(int size, int *a, int *b) {
int *out,i, j, *tmp1, *tmp2, *tmp3, *tmpa1, *tmpa2, *tmpb1, *tmpb2,d, *res1, *res2;
fprintf(stdout, "size: %d\n", size);
out = (int *)malloc(sizeof(int) * size * 2);
}
I comprobado tamaño con una fprintf
, y es un número entero positivo (por lo general 50 en ese punto). Traté de llamar al malloc
con un número simple también y sigo recibiendo el error. Estoy perplejo por lo que está pasando, y nada de Google que he encontrado hasta ahora es útil.
¿Alguna idea de lo que está pasando? Estoy intentando descubrir cómo compilar un GCC más nuevo en caso de que sea un error del compilador, pero realmente lo dudo.
sospecho que el problema es en realidad una línea anterior a esa. Tal vez un doble gratis? –
tercera línea en el programa: int * mult (tamaño int, int * a, int * b) { \t int * a cabo, i, j, * tmp1, * TMP2, * tmp3, * tmpa1 , * tmpa2, * tmpb1, * tmpb2, d, * res1, * res2; \t fprintf (stdout, "size:% d \ n", size); \t \t out = (int *) malloc (sizeof (int) * size * 2); – Chris