对数组的循环函数出现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
谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
buffer overrun是指缓冲区溢出,release下没有是因为只有debug才会检测
我稍微看一下,可能是数组下标问题。
譬如一个数组Array[N],下标范围是0 ~ N-1,但是这段程序里面似乎下标都写成0 ~ N了
例如
for (int i = 0; i<= 642; i++)
0 ~ 642for(int i =0;i<643;i++)
0~ 642for(int j=0;j<483;j++)
0~482for(int i =1;i<641;i++)
1~ 640for(int j=1;j<481;j++)
1~ 480for (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 而不是 <=