最佳答案
我正在实现一个分而治之的多项式算法,这样我就可以将它与 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);
}
我用 fprintf
检查了 size,它是一个正整数(通常是50)。我也试着用一个普通的号码打电话给 malloc
,但我仍然得到了错误。我只是不知道发生了什么,到目前为止,我在谷歌上找到的东西都没有帮助。
知道是怎么回事吗?我正在想办法编译一个新的 GCC 以防出现编译器错误,但我真的很怀疑。