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

发布于 2022-09-01 07:05:34 字数 2140 浏览 19 评论 0

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

谢谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

段念尘 2022-09-08 07:05:34

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

满意归宿 2022-09-08 07:05:34

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文