Ошибка malloc при вычислении дескриптора OpenCV

Я работаю с OpenCV для вычисления дескрипторов ORB, проблема у меня заключается в том, что в случайные моменты выполнения я получаю такую ​​ошибку

LightFieldRecovery (3468,0x7fff73a9a310) malloc: * ошибка для объекта 0x100911608: неверная контрольная сумма для освобожденного объекта — объект, вероятно, был изменен после освобождения.
*
установить точку останова в malloc_error_break для отладки

Я не работаю с указателем (явно) Я использую std :: vectors в качестве контейнеров данных.
Код слишком длинный, чтобы разместить его здесь, но вы могли видеть его https://github.com/BRabbit27/LigthField/blob/master/LightFieldRecovery/main.cpp

Кто-нибудь может определить, где может быть эта ошибка? Я искал это целый день.

Я работаю под OS X Mavericks, Xcode 5 и C ++ (в настройках сборки в Xcode Диалект C ++ установлен в -станд = гну ++ 11 в противном случае я не могу скомпилировать код OpenCV)

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

С помощью Valgrind мне удалось сузить проблему до следующих фрагментов кода, но я не вижу, в чем ошибка, я не понимаю, чего мне не хватает при копировании данных из cv::Mat в uchar* указатель.

Ошибка А

        //GET THE RIGHT AND DOWN NEIGHBORS TO COMPUTE THE DIFFERENCES
uint offset = 0;
for (Pixel p : patchPos)
{
uint r = p.getY();
uint c = p.getX();

uchar pixelV = ((uchar*)camRef->getData())[r*imageW+c];

uint cRightNeighbor = c+patchStep;
uchar pixelVrightP = 0;

if (cRightNeighbor < imageW)
{
pixelVrightP = abs(pixelV - ((uchar*)camRef->getData())[r*imageW+cRightNeighbor]);
}

uint rDownNeighbor = r+patchStep;
uchar pixelVbelowP = 0;

if (rDownNeighbor < imageH)
{
pixelVbelowP = abs(pixelV - ((uchar*)camRef->getData())[rDownNeighbor*imageW+c]);
}

//THIS IS PART OF THE ERROR
Cdiff[iPatch*(patchSize*patchSize)*2 + offset] = pixelVrightP;
Cdiff[iPatch*(patchSize*patchSize)*2 + offset+(patchSize*patchSize)] = pixelVbelowP;
offset++;
}

Ошибка Б

Видимо, как я притворяюсь использовать memset не очень хороший

            for (uint dRow = 0; dRow < camPatchKeyPoints.size(); dRow++)
{
if (camPatchKeyPoints[dRow].pt.x < 0   || camPatchKeyPoints[dRow].pt.y < 0 ||
camPatchKeyPoints[dRow].pt.x > imageW || camPatchKeyPoints[dRow].pt.y > imageH)
{
memset(&(d.data[dRow*d.cols]), 0, sizeof(uchar)*d.cols);
}
}

Ошибка C

Аналогично с memcpy Я передаю неправильные параметры или копирую в область за пределами

        dst = Q;
for (uint dl = 0; dl < disparityLevels; dl++)
{
for (uint c = 0; c < (nTotalCams-1); c++)
{
memcpy(dst, &(((uchar*)(camsDescriptors[c].data))[dl*DESCRIPTOR_SIZE]), sizeof(uchar)*DESCRIPTOR_SIZE);
dst += DESCRIPTOR_SIZE;
}
}

Ошибка D

    dst = Y;
for (cv::Mat refD : refsDescriptors)
{
memcpy(dst, refD.data, sizeof(uchar)*DESCRIPTOR_SIZE);
dst += DESCRIPTOR_SIZE;
}

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]