首先,我想要做的是通过执行“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) ;
}
答案 0 :(得分:2)
我认为问题是双重的。
首先,tmpPlateau
不是一个单独的对象。它只是指向*this
的另一个指针:
Plateau* tmpPlateau = this ;
因此,以下调用operator=()
并将*this
作为其参数:
*this = *tmpPlateau ;
我怀疑崩溃是因为您的operator=()
无法正确处理自我分配。
然而,真正的问题是tmpPlateau
需要保存对象的副本而不是指针。
最后,如果使用std::vector
而不是数组,您会发现实现类更容易。这样可以更轻松地发展plateau
。