计算相关系数报错 请问怎么改啊

0x00007FF89C214ED9 处(位于 ConsoleApplication14.exe 中)有未经处理的异常: Microsoft C++ 异常: cv::Exception,位于内存位置 0x0000003D1533DBB0 处。

Mat correlate_caculate(Mat img1, Mat img2, int row, int col) {
Mat img1_gray(row, col, CV_64FC1);
Mat img2_gray(row, col, CV_64FC1);
cvtColor(img1, img1_gray, COLOR_RGBA2GRAY);
cvtColor(img2, img2_gray, COLOR_RGBA2GRAY);

Mat correlate(row, col, CV_64FC1);
for (int i = 0; i < row; i++) {
    for (int j = 0; j < col; j++) {
        double *ptr1 = img1_gray.ptr<double>(i, j);
        double *ptr2 = img2_gray.ptr<double>(i, j);
        double *ptr = correlate.ptr<double>(i, j);

        double x1 = 0;
        double x2 = 0;
        for (int k = -1; k <= 1; k++) {
            for (int t = -1; t <= 1; t++) {
                double *ptr11 = img1_gray.ptr<double>(i + k, j + t);
                double *ptr22 = img2_gray.ptr<double>(i + k, j + t);
                x1 += *ptr11;
                x2 += *ptr22;
            }
        }

        //3×3邻域窗口均值
        x1 /= 9.0;
        x2 /= 9.0;

        //(i,j)处的相关系数
        double a = 0, b = 0, c = 0;
        for (int k = -1; k <= 1; k++) {
            for (int t = -1; t <= 1; t++) {
                double *ptr11 = img1_gray.ptr<double>(i + k, j + t);
                double *ptr22 = img2_gray.ptr<double>(i + k, j + t);
                a += (*ptr11 - x1)*(*ptr22 - x2);
                b += pow(*ptr11 - x1, 2);
                c += pow(*ptr22 - x2, 2);
            }
        }
        *ptr = a / (sqrt(b)*sqrt(c));
    }
}
return correlate;

}

指针比较多,可能是哪个指针为空,没有判断是否为空直接进行指针操作造成的
最好的办法一是对指针增加有效性判断;二是调试。光看代码不好判断