Я реализую алгоритм полиномиального разделения и завоевания, поэтому я могу сравнить его с реализацией OpenCL, но я не могу заставить malloc
работать. Когда я запускаю программу, она выделяет кучу вещей, проверяет некоторые вещи, а затем отправляет size/2
в алгоритм. Потом, когда я снова попал в malloc
линию он выплевывает это:Почему я получаю ошибку утверждения malloc C?
malloc.c: 3096: SysMalloc: Утверждение `(old_top == (((mbinptr) (((символ *) & ((ау) - > 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) -> размер & 0x1) & & ((неподписанных долго) 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, если это ошибка компилятора, но я действительно сомневаюсь в этом.
Я подозреваю, что проблема на самом деле является линией до этого. Возможно, двойная свобода? –
третья строка в программе: INT * мульт (интермедиат размер, Int * а, Int * б) { \t INT * вне, I, J * tmp1, * tmp2, * tmp3, * tmpa1 , * tmpa2, * tmpb1, * tmpb2, d, * res1, * res2; \t fprintf (stdout, "размер:% d \ n", размер); \t \t out = (int *) malloc (размерof (int) * размер * 2); – Chris