在检查变量时,GuardMalloc显示意外的EXC_BAD_ACCESS

时间:2016-10-04 13:36:40

标签: c++ opencv guard-malloc

我启用了GuardMalloc来搜索我的代码中的Bug。在运行我的应用程序时,它以某种方式向我显示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 = 250y+1 = 252所以仍然在Mat的边界。)

修改 变量img是来自opencv的cv::Mat类型的对象。所以它是一个2D矩阵,里面有关于图像的信息。

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

0 个答案:

没有答案