【问题标题】:Deleting a pointer to 2d array in destructor ends with a crash在析构函数中删除指向二维数组的指针以崩溃结束
【发布时间】:2018-11-01 09:04:25
【问题描述】:

我创建的类中的析构函数有问题。

我的构造函数如下所示:

chess_b = new int*[N];
for (int i = 1; i <= N; i++)
     chess_b[i] = new int[N]; 

和这样的析构函数:

for (int i = 1; i <= N; i++)
    delete[] chess_b[i];

delete[] chess_b;

有时候 eeerything 工作正常,但它经常崩溃,当我尝试调试时它指向这行代码:

delete[] chess_b[i];

我试过用这个-> 但也没用。

提前感谢您的帮助。

【问题讨论】:

  • 如果你有析构函数,你关注the rules of three or five吗?虽然我建议你开始使用std::vector 并遵循零规则。
  • C++ 使用基于0 的索引,而不是来自1。所以有效的索引是[0][N-1] 循环中的最后一次迭代超出范围
  • 或者你可能需要a few good books,或者重读你的课堂笔记。

标签: c++ pointers multidimensional-array destructor delete-operator


【解决方案1】:

你的 for 循环应该是 0 到 N-1,而不是 1 到 N

【讨论】:

    【解决方案2】:

    C++ 中的索引必须从0N-1

    for (int i = 0; i < N; i++)
    

    【讨论】:

      猜你喜欢
      • 2012-03-13
      • 2018-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-19
      • 1970-01-01
      相关资源
      最近更新 更多