int** z= new int *[5];
for (int j = 0; j < 8; j ++)
{
z[j] = new int[5];
}
for (int n=0; n<8; ++n)
{
for(int m=0;m<5;++m)
{
int x=n%4;
int y=x*wB;
int p=(*(B+(y+m)));
z[n][m]=p;
}
}
return z;
在Bad_Acess_error
处抛出n=6
,但
int** z= new int *[5];
for (int j = 0; j < 8; j ++)
{
z[j] = new int[5];
}
for (int n=0; n<8; ++n)
{
for(int m=0;m<5;++m)
{
int x=n%4;
int y=x*5;
int p=(*(B+(y+m)));
z[6][m]=p;
}
return z;
}
不会抛出任何错误。为什么?这真的很奇怪,我似乎无法理解为什么会这样。我只是输入更多文字,所以它允许我发布这个问题。
修改:用数字替换变量。这些数字只是所讨论数组的限制。我知道第二个代码是有效的,因为输出正是我所期望的那样。
答案 0 :(得分:1)
简单地说:Buffer Overrun。
int** z= new int *[5]; // Allocates space for 5 slots.
for (int j = 0;
j < 8; // <---- *** Assumes space for 8 slots!!!!!
j ++)
{
z[j] = new int[5]; // At j==6, access is outside the array.
}