Malloc断言失败(Malloc.c:2385)
所以我现在正在进行矩阵计算/转换,现在出现了一个断言错误 我开始实施矩阵CRS转换,程序运行良好:Malloc断言失败(Malloc.c:2385),c,arrays,malloc,C,Arrays,Malloc,所以我现在正在进行矩阵计算/转换,现在出现了一个断言错误 我开始实施矩阵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 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;
}
我使用与上面相同的方法执行此操作,但现在我得到一个断言错误:
矩阵:malloc.c:2385:sysmalloc:Assertion`(old\u top==initial\u top
(av)和旧尺寸==0)| |((无符号长)(旧尺寸)>=MINSIZE&&
上一个使用(旧的顶部)和((无符号长的)旧的结束和(页面大小-1))==
“0)”失败
我不知道为什么。您破坏了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));
关于风格/习惯的说明:
您已损坏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));
关于风格/习惯的说明: