0

首先,我想要做的是通过执行“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) ;
}
4

1 回答 1

2

我认为问题是双重的。

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

  Plateau* tmpPlateau = this ;      

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

  *this = *tmpPlateau ;   

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

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

std::vector最后,如果您使用而不是数组,您会发现实现您的类要容易得多。这将使它更容易成长plateau

于 2013-01-19T12:30:41.880 回答