为什么这段代码会崩溃

Why does this code crash

本文关键字:崩溃 代码 段代码 为什么      更新时间:2023-10-16

这是一个外行人对模糊图像的尝试,我没有使用任何特定的[已知]算法,我正在实现我自己的技术。

float k[][5]= { .01, .01, .01, .01, .01,
                .01, .01, .01,  .01, .01,
                .01, .01, .01,  .01, .01};
for( row = 0; row < rows; ++row) 
    {
            sum=0;
            for ( col = 0; col < cols; ++col) 
            {               
                            temp_ptr  = &((uchar*)(img->imageData + (img->widthStep*row)))[col];
                            for( i=1; i<6;i++)
                            {
                                float factor=exp((float)(-(i-col)*(i-col)/(2*sigma2))); 
                                sum+=factor;
                                for( j=1; j<6 ;j++)
                                {
                                    if( (row-j)>0 && (col-i)>0   )
                                    k[i-1][j-1]+=factor*temp_ptr[row-i+col-j];
                                }
                                for( j=1; j<6 ;j++)
                                {
                                    if( (row-j)>0 && (col-i)>0   )
                                    {
                                    uchar* temp_ptr1  = &((uchar*)(img->imageData + (img->widthStep * (row-1) )))[col-1];
                                temp_ptr1[0]=temp_ptr[0]*k[i-1][j-1]/sum;   
                                temp_ptr1[1]=temp_ptr[1]*k[i-1][j-1]/sum;   
                                temp_ptr1[2]=temp_ptr[2]*k[i-1][j-1]/sum;   
                                    }
                                }
                            }
            }
    }

您的j索引超出了数组k的范围。它不能大于5 !

在第5个for中,您应该将上限更改为5而不是6

k只有三行,但是在第一个内部j for循环中访问不存在的第4行和第5行。在访问了这些行之后,程序的其余部分就没有任何悬念了。

我不知道,但是代码很容易出错。使用c++的OpenCV接口