我正在实现一个分而治之的多项式算法,这样我就可以根据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判断了大小,它是一个正整数(通常是50).我也试着用一个普通号码拨打malloc,但还是出现了错误.我只是对正在发生的事情感到困惑,到目前为止,我从谷歌找到的任何东西都没有帮助.

知道发生了什么吗?我试图找出如何编译一个新的GCC,以防它是一个编译器错误,但我真的怀疑它.

推荐答案

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

Valgrind以下运行您的代码,以查看您的程序在哪里做了不正确的事情.

C++相关问答推荐

在C语言中使用scanf()时我无法理解的警告

如何创建由符号组成的垂直结果图形?

LONG_DOUBLE_T是否存在(标准C:C23)

我在这里正确地解释了C操作顺序吗?

为什么我不能只在内存地址中添加一个int来寻址任何数组?

如何按顺序将所有CSV文件数据读入 struct 数组?

在txt文件中找到指定的字符串,并从数字中减go 相同的值

为什么Fread()函数会读取内容,然后光标会跳到随机位置?

将变量或参数打包到 struct /联合中是否会带来意想不到的性能损失?

在函数外部使用内联ASM时无法指定操作数

这个空指针类型的转换是有效代码还是恶意代码?

错误:字符串在C中获得意外输出

";错误:寄存器的使用无效;当使用-masm=intel;在gcc中,但在AT&;T模式

为什么孤儿进程在 Linux 中没有被 PID 1 采用,就像我读过的一本书中声称的那样?

为什么INT_MIN是在c语言的头文件limits.h中定义的(-INT_MAX-1)而不是直接使用-2147483648

使用邻接表创建图

子进程不会修改父进程中的统计信息

当循环变量在溢出时未定义时,可以进行哪些优化?

我们可以在不违反标准的情况下向标准函数声明添加属性吗?

如何根据当前舍入方向将float转换为int?