首页 > 对数组的循环函数出现Buffer Overrun Issues

对数组的循环函数出现Buffer Overrun Issues

float **Temp;
Temp = new float*[642];                     // Spalten / cols / width / Bildbreite
for (int i = 0; i<= 642; i++)               // Elementzugriff = [Zeile][Spalte]
{
    Temp[i] = new float[482];               // Zeilen / rows / height / Bildhoehe
}

    for(int i =0;i<643;i++)                //赋初值都为0
    {
        for(int j=0;j<483;j++)
        {
            Temp[i][j]=0;
        }
    }

    for(int i =0;i<640;i++)               //讲另一个数组的值放到这个数组的一部分中
    {
        for(int j=0;j<480;j++)
        {
            Temp[i+1][j+1]=Erg_2DArray[i][j];
        }
    }


    for(int i =1;i<641;i++)
    {
        for(int j=1;j<481;j++)
        {
            float a[8];                                     //取出某点及其周围8个点
            a[0]=Temp[i-1][j-1];
            a[1]=Temp[i-1][j];
            a[2]=Temp[i-1][j+1];
            a[3]=Temp[i][j-1];
            a[4]=Temp[i][j];
            a[5]=Temp[i][j+1];
            a[6]=Temp[i+1][j-1];
            a[7]=Temp[i+1][j];
            a[8]=Temp[i+1][j+1];

            //冒泡排序
            int temp= 0; 
                 for(int m=0;m<9;m++) 
                 {  
                     for(int n=m+1;n<9;n++)  
                     {  
                         if(a[m] > a[n])  
                             {  
                                 temp = a[m];  
                                 a[m] = a[n];  
                                 a[n] = temp;  
                             }  
                     }  
                 }                 
            //----------------------------------------
            _2DArray[i-1][j-1]=a[4];             //每次排序的中值组成新的数组
        }
    }

//其中_2DArray是全局变量,定义如下
_2DArray = new float*[640]; // Spalten / cols / width / Bildbreite
for (int i = 0; i<=640; i++) // Elementzugriff = [Zeile][Spalte]
{
_2DArray[i] = new float[480]; // Zeilen / rows / height / Bildhoehe
}


debug的时候说Buffer Overrun,是在找不到解决方法,换成release,则程序可以运行

想请问一下如何解决debug时候出现的Buffer Overrun

谢谢!


buffer overrun是指缓冲区溢出,release下没有是因为只有debug才会检测

我稍微看一下,可能是数组下标问题。
譬如一个数组Array[N],下标范围是0 ~ N-1,但是这段程序里面似乎下标都写成0 ~ N了
例如
for (int i = 0; i<= 642; i++) 0 ~ 642
for(int i =0;i<643;i++) 0~ 642
for(int j=0;j<483;j++) 0~482
for(int i =1;i<641;i++) 1~ 640
for(int j=1;j<481;j++) 1~ 480
for (int i = 0; i<=640; i++) // Elementzugriff = [Zeile][Spalte] 0 ~ 640


_2DArray = new float*[640]; // Spalten / cols / width / Bildbreite
for (int i = 0; i<=640; i++) // Elementzugriff = [Zeile][Spalte]
楼主申明了 640个 空间, 这里的for循环 应该是 i < 640 而不是 <=

【热门文章】
【热门文章】