首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

偷越访问数组

2013-08-26 
越界访问数组为了使访问A[-1]的行为安全,可以这样做:int ncinnint *A new int[n]int *B new int[

越界访问数组
为了使访问A[-1]的行为安全,可以这样做:


int n;
cin>>n;
int *A = new int[n];
int *B = new int[n+1];
A = B +1;
A[-1] = 0;
然后初始化A数组,B数组在下面的程序中没有用到。

问题:为了使A[-1]安全,就必须开辟一个B的数组吗?有没有其他的方法?或者可以使B的数组开的小一点? 数组,?越界访问
[解决办法]
int *A = new int[n+1]+1;
不就可以了???
A[-1]=0;
....
delete [](A+1);

引用:
为了使访问A[-1]的行为安全,可以这样做:

int n;
cin>>n;
int *A = new int[n];
int *B = new int[n+1];
A = B +1;
A[-1] = 0;
然后初始化A数组,B数组在下面的程序中没有用到。

问题:为了使A[-1]安全,就必须开辟一个B的数组吗?有没有其他的方法?或者可以使B的数组开的小一点?

PS:
你的这种方法,会导致内存泄漏,为A分配的内存;
没有指针持有,这段内存丢失了,无法释放内存了,这不就是典型的内存泄漏吗???? 
[解决办法]

int a[10];
int * const p = a + 1;
for(int i = -1; i < 9; ++i)
{
  //p[-1], p[0], .... p[8]
  p[i] = 0;
}

热点排行