所以我现在正在做矩阵计算/转换,现在出现了一个断言错误。
我开始实现矩阵CRS转换,程序运行得很好:
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;
}当我打印出结果时,一切都是正确的。
现在,我想实现一个矩阵向量乘法,然后开始为一个向量分配内存以进行乘法和结果向量:
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)’失败。
我不知道为什么。
发布于 2019-05-02 17:01:36
您已经损坏了malloc的堆,很可能是:
uint32_t *rowchange = (uint32_t*)malloc(ROWS+1 * sizeof(uint32_t));应该是:
uint32_t *rowchange = (uint32_t*)malloc((ROWS+1) * sizeof(uint32_t));或者更好的是:
uint32_t *rowchange = malloc((ROWS+1) * sizeof(*rowchange));关于风格/习惯的说明:
https://stackoverflow.com/questions/55956919
复制相似问题