假设我有一个类播放器,它有成员变量num_houses和类型为house的指针temp1
class player{
private:
int num_houses;
house* temp1;
public:
player(){
num_houses = 0;
temp1 = new house[num_houses];
}
当我尝试调整大小或基本上添加/删除house类型的元素到我的房子阵列时,我的问题在于我的代码。在我的代码中,我碰巧遇到了分段错误。我很困惑,我是学生,所以任何建议或批评都会对我有所帮助!
void player::add_house(house tkn){
house* temp = new house[num_houses];
for(int i = 0; i < num_houses; i++){
temp[i] = temp1[i];
}
num_houses++;
if(temp1 != NULL){
delete [] temp1;
}
temp1 = new house[num_houses];
for(int i = 0; i < num_houses-1; i++){
temp1[i] = temp[i];
}
temp1[num_houses-1] = tkn;
delete [] temp;
}
答案 0 :(得分:1)
temp1 = new house[num_houses];
num_houses
为0
时是一个问题。
将默认构造函数更改为:
player() : num_houses(0), temp1(nullptr) {}
您可以简化成员函数add_house
,因此它只需要一对新的/删除。
void player::add_house(house tkn){
num_houses++;
house* temp = new house[num_houses];
for(int i = 0; i < num_houses-1; i++){
temp[i] = temp1[i];
}
temp[num_houses-1] = tkn;
if(temp1 != nullptr){
delete [] temp1;
}
temp1 = temp;
}
答案 1 :(得分:1)
为了增加数组大小,重写算法以执行以下步骤:
当然,如果您了解如何(4总是在1之后,6总是在1之后,5之后总是在4之后等等),你可以重新排序这个列表。
P.S。在删除指针之前,你不必检查指针是否为空 - 删除nullptr不会失败。
UPD :添加了代码
void player::add_house(house tkn {
house* temp = new house[num_houses + 1];
for(int i = 0; i < num_houses; i++) {
temp[i] = temp1[i];
}
num_houses++;
delete [] temp1;
temp1 = temp;
temp1[num_houses-1] = tkn;
}