Плохое выделение памяти C ++ для вектора - PullRequest
0 голосов
/ 13 октября 2010

Я получаю ошибку std_bad_alloc в следующем коде.Кажется, проблема в том, что когда я добавляю матрицу к вектору, программа вылетает, когда я добираюсь до этой строки в отладчике.Проблема в том, что из файла считываются только первые две матрицы, а две другие - нет, потому что программа вылетает с указанной выше ошибкой.

Ответы [ 2 ]

2 голосов
/ 13 октября 2010

Не ответ на проблему сбоев (которая уже была решена в любом случае), но следует отметить, что ваш оператор присваивания излишне расточителен, как написано в настоящее время:

matrix matrix::operator =(const matrix right)

Первая проблемачто он принимает параметр по значению.Это, конечно, означает, что когда происходит присвоение, подобное A = B, создается копия B и используется параметр right функции.Но в текущем коде единственной целью этой копии было бы установить значения A и затем уничтожить.Вы также можете передать const matrix&, чтобы избежать копирования.(В качестве альтернативы вы можете оставить параметр как копию по значению, но реализовать весь оператор как copy-and-swap .)

Вторая проблема заключается в том, что возвращается matrix.Это также может привести к созданию ненужной временной копии.И даже если компилятор может оптимизировать удаление копии, нет никакой цели, чтобы возвращение было копией по значению вообще.Стандартная форма оператора присваивания возвращает ссылку на объект, который был назначен.Таким образом, вы должны просто сделать этот тип возврата matrix&

2 голосов
/ 13 октября 2010

Нигде в вашем конструкторе копирования вы не установите numCols, numRows.

...