@ziplane

Почему выходит паника — panicked at 'panicked at 'index out of bounds: the len is 0 but the index is 0'?

Можете объяснить или дать ссылку почему выходит паника. По идее ведь все правильно.
let matrix_a =  vec![1,2,3,4];
    let matrix_b =  vec![5,6,7,8];
    let mut  matrix_c = vec![];


    for row in 0..2 {
        for  col in 0..2 {
            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.push(vec_buf)

            matrix_c[row *2 +col]= vec_buf // здесь место паники
        }
    }

    for (i,x) in matrix_c.iter().enumerate(){
        println!(" элем = {:?}, значение = {:?}",i,x)
    }
  • Вопрос задан
  • 126 просмотров
Решения вопроса 2
john36allTa
@john36allTa
alien glow of a dirty mind
Вектор проинициализирован, но память не выделена. Сделайте так:
let mut matrix_c = vec![type;size];
Ответ написан
bingo347
@bingo347
Crazy on performance...
У вас вектор 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);
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы