执行相同类的“Object = object”时出现Segfault错误

时间:2013-01-19 12:25:44

标签: c++ segmentation-fault

首先,我想要做的是通过执行“object ++”来调整类'数组的大小,但是 执行C ++程序时出现“Segmentation fault(core dumped)”错误。问题出在operator ++重载方法中。它应该在临时对象中复制第一个数组的包含(operator =重载已经完成并运行良好),然后更改数组的高度和宽度,最后再次复制对象内的临时对象,回。当我发表评论“* this = * tmpPlateau;”数组已调整大小,但不复制包含。这是代码:

Plateau& Plateau::operator++() {

      // New sizes
      int newHauteur = this->height + 2 ; 
      int newLargeur = this->width + 2 ; 

      // Tableau temporaire avec le contenu du plateau actuel
      Plateau* tmpPlateau = this ;      

      // Actualisation des dimensions 
      this->height = newHauteur ; 
      this->width = newLargeur ;

      this->plateau = new Etat*[height] ; 
      for (int i = 0; i < height; i++) {

        plateau[i] = new Etat[width] ;

      }

      *this = *tmpPlateau ;     

      return *this ;
}

operator =重载方法:

Plateau& Plateau::operator=(const Plateau& tab) {

      this->plateau = new Etat*[height] ; 
      for (int i = 0; i < height; i++) {

            this->plateau[i] = tab.plateau[i] ; 

       }

       Plateau(height, width) ;
}

1 个答案:

答案 0 :(得分:2)

我认为问题是双重的。

首先,tmpPlateau不是一个单独的对象。它只是指向*this的另一个指针:

  Plateau* tmpPlateau = this ;      

因此,以下调用operator=()并将*this作为其参数:

  *this = *tmpPlateau ;   

我怀疑崩溃是因为您的operator=()无法正确处理自我分配。

然而,真正的问题是tmpPlateau需要保存对象的副本而不是指针

最后,如果使用std::vector而不是数组,您会发现实现类更容易。这样可以更轻松地发展plateau