У меня проблемы с упражнением для школы, в котором нам нужно использовать динамическое распределение для массива char и массива int. Главное, я не должен менять основную функцию и способ построения объектов.
class Automobile
{
char* Name; //this is the name of the car that needs to be saved with dynamic alloc.
int* Reg; //registration with dynamic alloc.
int speed; //speed of the car
public:
Automobile(){ speed=0;}
Automobile(char* name,int* Reg,int speed)
{
Name=new char[strlen(name)+1];
strcpy(Name,name);
Reg = new int[5];
for(int i=0;i<5;i++)
{
this->Reg[i]=Reg[i];
}
this->speed=speed; //the normal constructor doesn't make any problems since it's called once
}
Automobile(const Automobile& new)
{
Name= new char[strlen(new.Name)+1];
strcpy(Name,new.Name);
Reg=new int[5];
for(int i=0; i<5; i++) Reg[i]=new.Reg[i];
speed=new.speed;
}
~Automobile(){
delete [] Name;
delete [] Reg;
}
int main()
{
int n;
cin>>n;
for (int i=0;i<n;i++)
{
char name[100];
int reg[5];
int speed;
cin>>name;
for (int i=0;i<5;i++)
cin>>reg[i];
cin>>speed;
Automobile New=Automobile(name,reg,speed);
}
в основной функции объект New воссоздается (??) в цикле, поэтому вызывается конструктор копирования (я не уверен в этом). В конструкторе копирования я не удаляю память (должен ли я?), поэтому отладчик показывает мне, что есть проблема в строке, где я делаю Новая память для имени . Я попытался добавить delete [] Name и сохранить имя другого объекта во временном указателе, поэтому я могу повторно назначить имя временному, но это тоже не работает. Компилятор не показывает никаких ошибок, когда я его собираю, но страница, на которой я должен сохранить упражнение, показывает, что у меня есть bad_alloc (я не уверен, связано ли это с указатель копирования).
new
, это ключевое слово C++. - person Cory Kramer   schedule 10.04.2015new
и добавления нескольких отсутствующих фигурных скобок ваш код компилируется и запускается. Что конкретно кажется проблемой? - person Igor Tandetnik   schedule 10.04.2015