Вставка вектора вызывает 'mallo c (): неверный следующий размер (несортированный)' - PullRequest
0 голосов
/ 24 января 2020

Я программирую на Raspberry Pi 3B + с установленной Raspbian OS.

У меня проблемы с этой строкой кода:

clusterPoints.insert(clusterPoints.begin(), cloudPtPointer);

Где clusterPoints - это вектор указателя типа cloudPoint, который я создал, а cloudPtPointer - указатель на cloudPoint, который я хочу вставить. Это моя структура cloudPoint:

struct cloudPoint {
    double realHeight;
    cv::Point3f point;
    cloudPoint* nextPoint;
} ;

Этот код работает не менее 2 недель. Затем я изменил некоторые вещи в другой части проекта, и он начал выдавать мне эту ошибку

"mallo c (): неверный следующий размер (не отсортирован)"

Эта ошибка не возникает в первые 8 раз, когда выполняется строка кода. Я проверил свои переменные, адрес памяти и вектор, и все работает как положено, но я не могу понять, что вызывает повреждение памяти.


РЕДАКТИРОВАТЬ: я не могу вставить свой код, но это строки кода, которые используют / имеют влияние на вектор. Извините за это заранее, но это единственный способ, которым я могу предоставить вам больше информации. Код имеет некоторое время (l oop 4 #) внутри for (l oop # 3) внутри for (l oop # 2) внутри for (l oop # 1). L oop # 2 и # 3 используются для go через 2d карту, а L oop 4 # используется для добавления всех связанных точек к вектору:

std::vector<cloudPoint*> clusterPoints;  --> In the beggining of the function
clusterPoints.clear();                   --> In the beggining of Loop #1
clusterPoints.insert(clusterPoints.begin(), cloudPtPointer); --> At Loop 3#
clusterPoints.insert(clusterPoints.begin(), connectedPointsSet.begin(), connectedPointsSet.end()); ---> after Loop #4 (inside loop #3).

That connectedPointsSet, является вектором cloudPoints. Чтобы построить этот вектор, я возвращаю набор точек, указывающих на следующую точку, до тех пор, пока ничто не указывает на это.


РЕДАКТИРОВАТЬ 2:

Изменение, вызвавшее ошибку, было в 2 функциях. Мне пришлось изменить заголовки, чтобы тип даты был совместимым. Это старые заголовки:

std::vector<Segmentation::cloudPoint>build2DTo3D(cv::Mat&);
bool transform2GlobalRef(std::vector<cv::Point3f>&);

И это новые:

std::vector<cv::Point3f> build2DTo3D(cv::Mat&);
std::vector<Segmentation::cloudPoint> transform2GlobalRef(std::vector<cv::Point3f>&)
...