Так что я сейчас делаю Матричные вычисления / преобразования, и теперь появилась ошибка утверждения.
Я начал внедрять Matrix-CRS-Conversion, и программа прекрасно работает:
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) || ((без знака long) (old_size)> = MINSIZE &&
prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) ==
0) 'не удалось.
Понятия не имею, почему.