C++ 如何";调整“大小”;c++;
假设我有一个类播放器,它有成员变量num_house和类型为house的指针temp1C++ 如何";调整“大小”;c++;,c++,C++,假设我有一个类播放器,它有成员变量num_house和类型为house的指针temp1 class player{ private: int num_houses; house* temp1; public: player(){ num_houses = 0; temp1 = new house[num_houses]; } 我的问题在于,当我试图调整大小或基本上将house类型的元素添加/删除到我的house数组中时,我的代码。在我的代码中,我碰巧遇到
class player{
private:
int num_houses;
house* temp1;
public:
player(){
num_houses = 0;
temp1 = new house[num_houses];
}
我的问题在于,当我试图调整大小或基本上将house类型的元素添加/删除到我的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;
}
void播放器::添加房子(房子tkn){
房屋*临时=新房屋[房屋数量];
对于(int i=0;i
当num\u house
为0
时出现问题
将默认构造函数更改为:
player() : num_houses(0), temp1(nullptr) {}
您可以简化成员函数
add_house
,这样就可以减少一对new/delete
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;
}
void播放器::添加房子(房子tkn){
num_++;
房屋*临时=新房屋[房屋数量];
对于(int i=0;i
要增加数组大小,请重写算法以执行以下步骤:
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;
}
void玩家::添加房子(房子tkn){
房屋*温度=新房屋[房屋数量+1];
对于(int i=0;i
既然这不能在C中编译,为什么要添加该标记?请不要这样做。只添加实际编程语言的语言标记。至于你的问题,只要你想到“动态数组”你下一个想法应该是。我被限制使用std::Vector此代码对我不起作用,因为没有定义temp2。想想看:如果你想增加数组,你只需要分配一次新数组。而不是两次。谢谢你的建议,我还想添加我的复制构造函数、析构函数和赋值操作符overload都是为我的house类创建的。你认为在这种情况下浅拷贝和深拷贝可能会有问题吗?我的程序中出现了一个“指针被释放时未分配”错误。@很可能是RobertYelas。请务必遵循。注意,我认为检查if(temp1!=nullptr)我们不需要。我们可以安全地使用null值调用delete。\r@Alexeishmakov,C++11标准对于delete
的参数是nullptr
时会发生什么是含糊不清的。请看。@RSahu,感谢您提供了有趣的链接。我不知道。
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;
}