Я включил 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);
с первым выражением я не получаю ошибку.
Задача ещё не решена.
Других решений пока нет …