Дамп ядра при изменении размера Eigen::VectorXdC++

Программы на 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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