0

我启用了 GuardMalloc 来搜索我的代码中的错误。运行我的应用程序时,它以某种方式向我显示 aEXC_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仍在 Mat 的边界内)。

编辑 该变量imgcv::Mat来自opencv的类型的对象。所以它是一个包含图像信息的二维矩阵。

EDIT2 看来,问题是由这里的这部分引起的:img.at<sift_wt>(y+1,x);使用第一个表达式我没有得到错误。

4

0 回答 0