Дамп ядра при изменении размера Eigen::VectorXd ⇐ C++

Программы на C++. Форум разработчиков
Anonymous
Дамп ядра при изменении размера Eigen::VectorXd

Сообщение Anonymous »

Я столкнулся со странной проблемой при работе с Eigen::VectorXd. Я объявил две переменные Eigen::VectorXd в заголовочном файле, а затем изменил их размер в конструкторе класса. Проблема возникает, когда я пытаюсь изменить размер второго вектора, что приводит к дампу ядра во время операции free().
Проверяя переменные, я заметил следующее:
Первый вектор после объявления выглядит так:

Код: Выделить всё

{ = { = { = { = { = { = { = {}, }, }, }, }, }, m_storage = {
m_data = 0x0, m_rows = 0}}, }
Однако второй вектор инициализируется следующим образом:

Код: Выделить всё

{ = { = { = { = { = { = { = {}, }, }, }, }, }, m_storage = {
m_data = 0x3fefae147ae147ae, m_rows = 4606281698874543309}}, }
Как видите, первый вектор правильно инициализирован с адресом 0x0 и 0 строк, а второй имеет случайный адрес в памяти и неправильное количество строк. Этот неверный адрес памяти вызывает дамп ядра при изменении размера вектора. Фактически, изменение размера сначала освобождает память, и адрес памяти недействителен.
В заголовочном файле все, что я делаю, это объявляю векторы:

Код: Выделить всё

Eigen::VectorXd v1_;
Eigen::VectorXd v2_;
Мои вопросы:
Почему второй вектор инициализируется случайными значениями для его адреса в памяти и строк?
Как избежать этой проблемы?
Может ли это быть связано с повреждением памяти или проблемой с Eigen?
Кто-нибудь сталкивался с этой проблемой в Eigen 3.3?
Я запускаю это на Ubuntu 18.04 с GCC 7.
Буду очень признателен за любую информацию!

Подробнее здесь: https://stackoverflow.com/questions/791 ... envectorxd

Вернуться в «C++»