Итак, у меня есть эта матрица из библиотеки Eigen.
Eigen::MatrixXd
И он заполнен данными и составляет 4х3900 баллов. Он используется в функции, которая имеет следующие строки:
Теперь матрица даже не используется в этом наборе кода, и для справки она называется modelPointCloud.
Используя GDB, я перебираю строки на изображении. Для workIndex
а также tid
В строке матрицы указан правильный размер (т.е. 4х3900). Но когда я перехожу к следующей строке (idTableLock
) это все еще хорошо, но когда я выполняю эту строку, вдруг матрица меняется на 0x167, что происходит каждый раз, но, по-видимому, является случайным числом.
Теперь из-за этого я получаю эту ошибку:
На этой линии:
Что имеет смысл, потому что матрицы больше не имеют правильный размер.
Теперь другие потоки работают, но ни у кого не должно быть доступа к этому типу данных. Кто-нибудь имеет представление о том, почему это происходит? Почему именно эта линия меняет матрицу?
Я думаю, что это не имеет ничего общего с Эйгеном. Для меня это звучит как повреждение памяти. Вы не можете напрямую обращаться к памяти через переменную modelPointCloud, но, скорее всего, делаете запись в память, которая содержит размер матрицы. Эти типы ошибок довольно сложно отлаживать. Вероятно, вы где-то используете индекс вне границ. Посмотри на других сообщений на эту тему.
Других решений пока нет …