Я впроваджую поліноміальний алгоритм поділу та завоювання, щоб я міг порівняти його з реалізацією 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)' failed.
Aborted
Рядок, про який йде мова:
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);
}
Я перевірив розмір за допомогою a fprintf
, і це натуральне ціле число (зазвичай 50 на той момент). Я також спробував зателефонувати malloc
з простим номером, і все ще отримую повідомлення про помилку. Я просто заплутаний у тому, що відбувається, і нічого від Google, яке я знайшов досі, не є корисним.
Будь-які ідеї, що відбувається? Я намагаюся зрозуміти, як скомпілювати новий GCC на випадок помилки компілятора, але я справді сумніваюся в цьому.