Seg故障动态分配2d阵列

时间:2013-09-01 04:28:31

标签: arrays pointers segmentation-fault 2d dynamic-allocation

我有一个家庭作业,我必须动态分配一个二维数组,当我的数组很长且很瘦时,我会遇到段错误,例如2x8,并且只有当某些值在数组中时才会出现问题。这是我制作数组然后删除它的代码。

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

使用gdb我发现在循环中第一次删除后就是segfaulting。

2 个答案:

答案 0 :(得分:0)

您混淆了索引。您分配w指针,但您的循环通过i元素运行h

答案 1 :(得分:0)

分配值的循环交换了边界。

p被赋予一个长度为w的数组,但是循环到i的迭代器h用于索引它。

p= new int *[w];

....

cin >> p[i][k];

p[i][k]读为p[i],然后由[k]编入索引。