为什么会出现C malloc断言失败?

我正在实现分而治之多项式算法,因此可以将其对照OpenCL实现进行基准测试,但无法开始malloc工作。当我运行程序时,它会分配一堆东西,检查一些东西,然后将其发送size/2给算法。然后,当我malloc再次点击该行时,它会吐出以下内容:


malloc.c:3096:sYSMALLOc:声明`(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以防出现编译器错误,但我真的对此表示怀疑。


喵喵时光机
浏览 1035回答 3
3回答

德玛西亚99

99.9%的可能性是您损坏了内存(缓冲区溢出或溢出,在释放指针后写入指针,在同一指针上两次调用free等)。在Valgrind下运行代码,以查看程序在哪里做错了什么。
打开App,查看更多内容
随时随地看视频慕课网APP