GuardMalloc показывает неожиданный EXC_BAD_ACCESS при проверке переменных

Я включил GuardMalloc для поиска ошибки в моем коде. При запуске моего приложения это как-то показывает мне EXC_BAD_ACCESS но когда я смотрю на переменные не должно быть EXC_BAD_ACCESS, Вот код:

for(i = -radius, k = 0; i <= radius; i++){

int y = pt.y+i;
if( y <= 0 || y >= img.rows - 1)
continue;

for(j = -radius; j <= radius; j++){

int x = pt.x + j;
if(x <= 0 || x >= img.cols - 1)
continue;
float dx = (float)(img.at<sift_wt>(y, x+1) - img.at<sift_wt>(y,x-1));
float dy = (float)(img.at<sift_wt>(y-1,x) - img.at<sift_wt>(y+1,x)); //Throws EXC_BAD_ACCESS here.

X[k] = dx; Y[k] = dy; W[k] = (i*i + j*j)*expf_scale;
k++;
}
}

Значения и переменные выглядят так, когда выдается ошибка:

img.rows = 255
img.cols = 255
pt.x = 220
pt.y = 244
radius = 7
i = 7
j = -7
y = 251
x = 213
k = 210

Я пытался использовать Guard Malloc, потому что я хотел найти источник другого EXC_BAD_ACCESS Ошибка в другом методе. Может быть, эта часть кода является источником этой ошибки, но я не знаю, как исправить эту ошибку, потому что обычно указатели не имеют доступа к значению из матрицы (y-1 = 250 а также y+1 = 252 так еще в границах мата).

РЕДАКТИРОВАТЬ
Переменная img это объект из типа cv::Mat из opencv. Так что это 2D матрица, заполненная информацией об изображении.

EDIT2
Кажется, что проблема вызвана этой частью здесь: img.at<sift_wt>(y+1,x); с первым выражением я не получаю ошибку.

0

Решение

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

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

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

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