首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Malloc断言失败(malloc.c:2385)

Malloc断言失败(malloc.c:2385)
EN

Stack Overflow用户
提问于 2019-05-02 16:45:59
回答 1查看 920关注 0票数 0

所以我现在正在做矩阵计算/转换,现在出现了一个断言错误。

我开始实现矩阵CRS转换,程序运行得很好:

代码语言:javascript
复制
uint32_t size = 0;
for (uint32_t i = 0; i < ROWS; i++)
{
    for (uint32_t j = 0; j < COLUMNS; j++)
    {
        if(Matrix[i][j] != 0) 
            size++;
    }
}

// Allocating memory for CRS
uint32_t *values = (uint32_t*)malloc(size * sizeof(uint32_t));
uint32_t *columnindex = (uint32_t*)malloc(size * sizeof(uint32_t));
uint32_t *rowchange =  (uint32_t*)malloc(ROWS+1 * sizeof(uint32_t));

uint32_t position = 0;
uint32_t rowPtr = 0;
rowchange[0] = 0;
rowchange[ROWS] = size;

for (uint32_t i = 0; i < ROWS; i++)
{
    for (uint32_t j = 0; j < COLUMNS; j++)
    {
        if(Matrix[i][j] != 0) {
            values[position] = Matrix[i][j];
            columnindex[position] = j;
            position++;
        }
     }
     rowPtr++;
     if(rowPtr != ROWS)
         rowchange[rowPtr] = position;
}

当我打印出结果时,一切都是正确的。

现在,我想实现一个矩阵向量乘法,然后开始为一个向量分配内存以进行乘法和结果向量:

代码语言:javascript
复制
uint32_t *multvector = (uint32_t*)malloc(ROWS * sizeof(uint32_t));
uint32_t *result = (uint32_t*)malloc(ROWS * sizeof(uint32_t));

我这样做的方式和上面一样,但现在我得到一个断言错误:

矩阵: malloc.c:2385: sysmalloc:断言‘(old_top == initial_top (av) & old_size == 0) x(无符号长) (old_size) >= MINSIZE & prev_inuse (old_top) &((未签名long) old_end & (pagesize -1) == 0)’失败。

我不知道为什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-02 17:01:36

您已经损坏了malloc的堆,很可能是:

代码语言:javascript
复制
uint32_t *rowchange =  (uint32_t*)malloc(ROWS+1 * sizeof(uint32_t));

应该是:

代码语言:javascript
复制
 uint32_t *rowchange =  (uint32_t*)malloc((ROWS+1) * sizeof(uint32_t));

或者更好的是:

代码语言:javascript
复制
 uint32_t *rowchange =  malloc((ROWS+1) * sizeof(*rowchange));

关于风格/习惯的说明:

  1. 铸造是件坏事,只有在必要的时候才能使用。它降低了编译器报告可疑类型组合的能力,并使代码更难阅读,特别是在这种情况下,它什么也不做。
  2. 只是为了稍微放松一下耦合,通常更倾向于使用sizeof(*rowchange)而不是sizeof(类型名称)。它减少了检查代码评审的次数,并使目的更加明显。
  3. 通常,当您在这里提问时,您应该在不需要添加一吨脚手架的情况下运行C+P。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55956919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档