std :: vector <Eigen :: Matrix4f> выделил память, но не может получить доступ к ее элементам - PullRequest
1 голос
/ 14 июня 2019

Я создал вектор, который содержит 100 Eigen :: Matrix4f. Но когда я использую transforms[i] для доступа к его элементам, программа показывает «ядро сброшено: ошибка сегментации». Когда я использую функцию push_back() для ее инициализации, она работает хорошо. Я проверил размер вектора. Это 100. Я в замешательстве.

Это в Ubuntu 16.04. Я использую CMake + GCC для его компиляции.

Ошибка сегментации C ++ код

std::vector<Eigen::Matrix4f> transforms(100);
//transforms.size() is 100. I checked it.
for(int i = 0; i < transforms.size(); i++)
{
    //I use transforms[i] to access the element in transforms.
    transforms[i] = a_function_returns_a_valid_Matrix4f();
}

Следующий код работает с использованием std::vector::push_back().

std::vector<Eigen::Matrix4f> transforms;
for(int i = 0; i < 100; i++)
{
    //When I use push_back() to initialize transforms, it works.
    transforms.push_back(a_function_returns_a_valid_Matrix4f());
}

Кажется, std::vector правильно выделил память. Я проверил его размер. Но не удалось получить доступ к его элементу с помощью transforms[i].

...