双指针问题

neo*_*ram 2 c++ pointers breakpoints

任何人都可以告诉我这段代码有什么问题

int* x=new int(5) ;
int i =0;
int** y = new int*[i];
for(int j = 0 ;j<5 ; j++)
{
     y[i++]=x;
}
delete[] y;
Run Code Online (Sandbox Code Playgroud)

当我删除y时,编译器总是触发一个断点,注意我不想删除对象"x"谢谢

Ed *_* S. 7

int i =0;
int** y = new int*[i];
Run Code Online (Sandbox Code Playgroud)

好吧,你刚刚分配了一个指向int的指针数组,其大小足以容纳零元素.在你的循环中你是:

  1. 在数组边界外写(请记住,零元素......)
  2. 每次迭代增加两次循环计数器.
  3. 永远不要使用循环变量j.
  4. 如前所述,x将... 的值分配给...的所有其他元素,这些元素y超出了数组的边界.

我真的不知道你要在这里完成什么.多一点背景怎么样?您通过在边界外指定来调用未定义的行为y,因此在此之后可能发生任何事情.