在c++中访问数组内存会抛出错误

Accessing array memory in c++ throws error

本文关键字:出错 错误 内存 数组 c++ 访问      更新时间:2023-10-16
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;    

n=6抛出一个Bad_Acess_error,但是

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;               
}

不抛出错误。为什么?这真的很奇怪,我似乎不明白为什么会发生这种情况。我只是在输入更多的文本,所以它允许我发布这个问题。

Edit:用数字替换变量这些数字只是所讨论的数组的极限。我知道第二段代码可以工作,因为输出正是我所期望的。

简单地说:缓冲区溢出。

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.  
}
相关文章: