У вас вектор matrix_c изначально пустой, Вы пытаетесь писать в несуществующий элемент.
Вижу, что у Вас закоменчен вариант с методом push (почему он Вам не подошел не знаю).
Как вариант можно сразу создать вектор нужного размера, заполненный значениями по умолчанию (например нулями):
// добавлю пару констант, для простоты модификации
let rows = 2;
let cols = 2;
let matrix_a = vec![1,2,3,4];
let matrix_b = vec![5,6,7,8];
let mut matrix_c = vec![0; rows * cols]; // 0 - default, rows * cols - размер (4)
for row in 0..rows {
for col in 0..cols {
let mut vec_buf = 0;
for k in 0..2 {
vec_buf = vec_buf + matrix_a[row * 2 + k] * matrix_b[k * 2 + col];
}
matrix_c[row * 2 + col] = vec_buf; // теперь должно быть все ок
// так как спокойно передаем владение существующему элементу вектора
}
}
for (i, x) in matrix_c.iter().enumerate(){
println!(" элем = {:?}, значение = {:?}", i, x);
}