【问题标题】:Seg fault dynamically allocated 2d array段错误动态分配的二维数组
【发布时间】:2013-09-04 12:01:26
【问题描述】:

我有一个家庭作业,我必须动态分配一个二维数组,并且当我的数组又长又窄(例如 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 我发现它在循环中的第一次删除后立即出现段错误。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      赋值循环的边界交换了。

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

      p= new int *[w];
      
      ....
      
      cin >> p[i][k];
      

      p[i][k] 被读取为p[i],然后由[k] 索引。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-06
        • 1970-01-01
        • 2020-11-23
        • 2014-01-07
        • 1970-01-01
        • 1970-01-01
        • 2021-10-11
        • 2014-06-15
        相关资源
        最近更新 更多