为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C
喵喵时光机 2019-11-29 14:55:22
我正在实现分而治之多项式算法,因此可以将其对照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以防出现编译器错误,但我真的对此表示怀疑。
查看完整描述

3 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

99.9%的可能性是您损坏了内存(缓冲区溢出或溢出,在释放指针后写入指针,在同一指针上两次调用free等)。


在Valgrind下运行代码,以查看程序在哪里做错了什么。


查看完整回答
反对 回复 2019-11-29
  • 3 回答
  • 0 关注
  • 1034 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信