Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Seg故障动态分配2d阵列_Arrays_Pointers_Segmentation Fault_2d_Dynamic Allocation - Fatal编程技术网

Arrays Seg故障动态分配2d阵列

Arrays Seg故障动态分配2d阵列,arrays,pointers,segmentation-fault,2d,dynamic-allocation,Arrays,Pointers,Segmentation Fault,2d,Dynamic Allocation,我有一个家庭作业,我必须动态分配一个2d数组,当我的数组又长又细(如2x8)时,我会出现seg错误,而问题只会在数组中存在某些值时出现。这是我创建数组然后删除它的代码 int main() { int **p; int w, h; cin >> w >> h; p= new int *[w]; for (int k=0; k<w; k++) p[k]= new int[h]; for (int i=0; i<h; i++)

我有一个家庭作业,我必须动态分配一个2d数组,当我的数组又长又细(如2x8)时,我会出现seg错误,而问题只会在数组中存在某些值时出现。这是我创建数组然后删除它的代码

int main()
{
  int **p;
  int w, h;

  cin >> w >> h;

  p= new int *[w];
  for (int k=0; k<w; k++)
    p[k]= new int[h];
  for (int i=0; i<h; i++)
  {
    for(int k=0; k<w; k++)
    {
      cin >> p[i][k];
    }
  }


  for (int k=0; k < w; k++)
    delete []p[k];
  delete []p;
  return 0;
}

example input that causes seg fault: 
8 2
5 4 2 3 0 1 2 5
2 0 1 0 9 6 3 2
intmain()
{
int**p;
int w,h;
cin>>w>>h;
p=新整数*[w];

对于(int k=0;k您混淆了索引。您分配
w
指针,但您的循环通过
h
元素运行
i

用于分配值的循环的边界已交换

p
被赋予一个长度为
w
的数组,但随后使用循环到
h
的迭代器
i
对其进行索引

p= new int *[w];

....

cin >> p[i][k];
p[i][k]
被读取为
p[i]
,然后被
[k]
索引