【问题标题】:C++ Delete and Compact even rows in 2D dynamic arrayC ++删除和压缩二维动态数组中的偶数行
【发布时间】:2016-10-15 20:41:30
【问题描述】:

我需要帮助

这个程序必须做的:

•删除所有偶数行

•将剩余的行压缩到二维数组的顶部

https://gyazo.com/64954d5a5ace39e7bb4264f2e2a9ecdf

代码:

int main(int argc, char ** argv){
   int ** array2d;

   int size = 10;
   array2d = new int *[size];
   cout << "***** Before Compaction ******" << endl;
   for (int i = 0; i < size; i++) {
      array2d[i] = new int[size];
      cout << "ROW " <<i << ":";
      for (int j = 0; j < size; j++) {
         array2d[i][j] = i;
         cout << " "<< array2d[i][j];
      }
      cout << endl;
   }

   //NEED HELP WITH THIS PART DOWN HERE


   for (int i = 0; i < size; i++) {
      if (i % 2 == 0) { // delete the even rows
         delete[] array2d[i];
         array2d[i] = NULL;
      }
      // for each row in the first half, redirect the pointer
      // to the next odd row
      if(i<size/2){
         array2d[i] = array2d[2 * i + 1];
         array2d[2 * i + 1] = NULL;

      }

      cout << endl;
   }
   return 0;
}

【问题讨论】:

标签: c++ arrays dynamic 2d


【解决方案1】:
  if (i % 2 == 0) { // delete the even rows
     delete[] array2d[i];
     array2d[i] = NULL;
  }

i == 0 对应第一行。我认为您可能希望将其更改为:

  if ((i+1) % 2 == 0) { // delete the even rows
     delete[] array2d[i];
     array2d[i] = NULL;
  }

然后,

     array2d[i] = array2d[2 * i + 1];
     array2d[2 * i + 1] = NULL;

需要:

     array2d[i] = array2d[2 * i];
     array2d[2 * i] = NULL;

更新

你所拥有的和我建议的问题是你正在泄漏内存。使用时:

     array2d[i] = array2d[2 * i];

分配给array2d[i] 的内存丢失。您无法释放该内存。您可能希望交换指针值以释放所有内存。

     int* temp = array2d[i];
     array2d[i] = array2d[2 * i];
     array2d[2 * i] = temp;

【讨论】:

  • 如何格式化 cout 以重新打印新数组
  • @JohnDoubie,除了确保i 的检查是i &lt; size/2 之外,与之前相同。
  • 感谢您的回复,我无法打印出错误
  • @JohnDoubie,这似乎与您的原始帖子无关。
猜你喜欢
  • 2015-06-10
  • 2021-12-30
  • 2015-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-11
  • 1970-01-01
  • 2014-12-05
相关资源
最近更新 更多