Я реализую алгоритм разделения и преодоления полиномов, поэтому я могу сравнить его с реализацией OpenCL, но я не могу заставить malloc
работать. Когда я запускаю программу, он выделяет кучу вещей, проверяет некоторые вещи, а затем отправляет size/2
в алгоритм. Затем, когда я снова попадаю в строку malloc
, он выплевывает это:
malloc.c: 3096: 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) 'не удалось. Отменено
Соответствующая строка:
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);
}
Я проверил размер с помощью fprintf
, и это положительное целое число (обычно 50 в этой точке). Я попробовал позвонить malloc
с простым номером, и я все еще получаю ошибку. Я просто в шоке от того, что происходит, и ничего из Google, которого я нашел до сих пор, полезно.
Есть идеи, что происходит? Я пытаюсь понять, как скомпилировать новый GCC в случае ошибки компилятора, но я действительно сомневаюсь в этом.