#c #memory-leaks #eigen #delete-operator #eigen3
#c #утечки памяти #eigen #удалить-оператор #eigen3
Вопрос:
Пожалуйста, рассмотрите процедуру в следующем фрагменте. Сначала динамически создайте данные, а затем создайте собственную матрицу, используя эти данные. В этом случае матрица освободит память о data
том, когда закончится ее жизненный цикл?
Я предполагаю, что в ходе Eigen::Map
операции указатель копируется, а фактические элементы data
не копируются. Таким образом, мы надеемся, что matrix освободит память data
.
#include<Eigen/Core>
using namespace Eigen;
int main(){
double* data = new double [6];
double* itr = data;
for(int i=0; i<6; i ){
*(itr ) = i;
}
auto m = Map<MatrixXd>(data, 2, 3);
}
Комментарии:
1. Откуда
Map
известно, что вы использовалиnew[]
для выделения данных? Что, если бы это был просто простой массивdouble
? Если в документации не указано, что вы должны использоватьnew[]
для выделения данных, всегда считайте, что вызов является вашей обязанностьюdelete[]
.
Ответ №1:
Матрица не освободит память по data
истечении срока службы.
Для Eigen нет никакого способа угадать, где находится ваш указатель (стек / куча или где угодно), и как он выделяется.