我不知道为什么我得到错误 "core dumped" C++
I cannout out why I get the error "core dumped" C++
我不知道为什么当我 运行 这段代码时 :
#include <iostream>
#include <cstring>
class Masina{
private:
long long putere;
int viteza;
double masa;
bool calificativ;
char* nume;
public:
Masina();//constuctor default
Masina(long long putere,int viteza,double masa,bool calificativ,char* nume);//constructor supraincarcat
~Masina();//destructor
// Masina(const Masina&) = delete;
// setter-e
void setPutere(long long putere);
void setViteza(int viteza);
void setMasa(double masa);
void setCalificativ(bool calificativ);
void setNume(const char* nume);
// getter-e
long long getPutere() const;
int getViteza() const;
double getMasa() const;
bool getCalificativ() const;
char* getNume() const;
};
//definire metode:
//constructor default
Masina::Masina():
putere(2000), viteza(250), masa(1.5), calificativ(false),nume((char*)"o_marca")
{}
//constructor supraincarcat
Masina::Masina(long long putere,int viteza,double masa,bool calificativ,char* nume):
putere(putere), viteza(viteza),masa(masa),calificativ(calificativ)
{}
//destructor default
Masina::~Masina()
{
std::cout << "putere: "<<putere<<"\nviteza: "<<viteza<<"\nmasa: "<<masa<<"\ncalificativ: "<<calificativ<<"\nnume: "<<nume;
std::cout<<"\nobiectul a fost sters\n\n";
}
//setter-e
void Masina::setPutere(long long putere)
{
this->putere = putere;
}
void Masina::setViteza(int viteza)
{
this->viteza = viteza;
}
void Masina::setMasa(double masa)
{
this->masa = masa;
}
void Masina::setCalificativ(bool calificativ)
{
this->calificativ = calificativ;
}
void Masina::setNume(const char* nume)
{
strcpy(this->nume,(char*)nume);
}
//setter-e
long long Masina::getPutere() const
{
return putere;
}
int Masina::getViteza() const
{
return viteza;
}
double Masina::getMasa() const
{
return masa;
}
bool Masina::getCalificativ() const
{
return calificativ;
}
char* Masina::getNume() const
{
return nume;
}
int main(){
Masina* m1 = new Masina();
{
Masina m2 = *m1;
m2.setNume("o_barca");
}
delete m1;
return 0;
}
发生分段错误。只要复制构造函数没有被删除,我认为 m2 应该是 m1 的浅拷贝,因此,两者 char* nume
保持相同的值(指向完全相同的内存位置)。因此,我希望更改存储在 char * nume
指向的地址的字符串应该更改存储在 char*nume
.
的 m1 和 m2 的字符串的内容
您正在使用 C 风格的转换:
nume((char*)"o_marca")
那很危险。不。 When should static_cast, dynamic_cast, const_cast and reinterpret_cast be used?
简单的 C++:Live
#include <iostream>
#include <string>
struct Car {
long long mass = 2000;
int speed = 250;
double power = 1.5;
bool qualifier = false;
std::string name = "o_marca";
friend std::ostream& operator<<(std::ostream& os, Car const& c)
{
return os << "mass: " << c.mass << "\n" //
<< "speed: " << c.speed << "\n" //
<< "power: " << c.power << "\n" //
<< "qualifier: " << c.qualifier << "\n" //
<< "name: " << c.name;
}
~Car() { std::cout << "Object has been deleted: " << *this << "\n"; }
};
int main()
{
Car m1, m2 = m1;
m2.name = "o_barca";
}
版画
Object has been deleted: mass: 2000
speed: 250
power: 1.5
qualifier: 0
name: o_barca
Object has been deleted: mass: 2000
speed: 250
power: 1.5
qualifier: 0
name: o_marca
我不知道为什么当我 运行 这段代码时 :
#include <iostream>
#include <cstring>
class Masina{
private:
long long putere;
int viteza;
double masa;
bool calificativ;
char* nume;
public:
Masina();//constuctor default
Masina(long long putere,int viteza,double masa,bool calificativ,char* nume);//constructor supraincarcat
~Masina();//destructor
// Masina(const Masina&) = delete;
// setter-e
void setPutere(long long putere);
void setViteza(int viteza);
void setMasa(double masa);
void setCalificativ(bool calificativ);
void setNume(const char* nume);
// getter-e
long long getPutere() const;
int getViteza() const;
double getMasa() const;
bool getCalificativ() const;
char* getNume() const;
};
//definire metode:
//constructor default
Masina::Masina():
putere(2000), viteza(250), masa(1.5), calificativ(false),nume((char*)"o_marca")
{}
//constructor supraincarcat
Masina::Masina(long long putere,int viteza,double masa,bool calificativ,char* nume):
putere(putere), viteza(viteza),masa(masa),calificativ(calificativ)
{}
//destructor default
Masina::~Masina()
{
std::cout << "putere: "<<putere<<"\nviteza: "<<viteza<<"\nmasa: "<<masa<<"\ncalificativ: "<<calificativ<<"\nnume: "<<nume;
std::cout<<"\nobiectul a fost sters\n\n";
}
//setter-e
void Masina::setPutere(long long putere)
{
this->putere = putere;
}
void Masina::setViteza(int viteza)
{
this->viteza = viteza;
}
void Masina::setMasa(double masa)
{
this->masa = masa;
}
void Masina::setCalificativ(bool calificativ)
{
this->calificativ = calificativ;
}
void Masina::setNume(const char* nume)
{
strcpy(this->nume,(char*)nume);
}
//setter-e
long long Masina::getPutere() const
{
return putere;
}
int Masina::getViteza() const
{
return viteza;
}
double Masina::getMasa() const
{
return masa;
}
bool Masina::getCalificativ() const
{
return calificativ;
}
char* Masina::getNume() const
{
return nume;
}
int main(){
Masina* m1 = new Masina();
{
Masina m2 = *m1;
m2.setNume("o_barca");
}
delete m1;
return 0;
}
发生分段错误。只要复制构造函数没有被删除,我认为 m2 应该是 m1 的浅拷贝,因此,两者 char* nume
保持相同的值(指向完全相同的内存位置)。因此,我希望更改存储在 char * nume
指向的地址的字符串应该更改存储在 char*nume
.
您正在使用 C 风格的转换:
nume((char*)"o_marca")
那很危险。不。 When should static_cast, dynamic_cast, const_cast and reinterpret_cast be used?
简单的 C++:Live
#include <iostream>
#include <string>
struct Car {
long long mass = 2000;
int speed = 250;
double power = 1.5;
bool qualifier = false;
std::string name = "o_marca";
friend std::ostream& operator<<(std::ostream& os, Car const& c)
{
return os << "mass: " << c.mass << "\n" //
<< "speed: " << c.speed << "\n" //
<< "power: " << c.power << "\n" //
<< "qualifier: " << c.qualifier << "\n" //
<< "name: " << c.name;
}
~Car() { std::cout << "Object has been deleted: " << *this << "\n"; }
};
int main()
{
Car m1, m2 = m1;
m2.name = "o_barca";
}
版画
Object has been deleted: mass: 2000
speed: 250
power: 1.5
qualifier: 0
name: o_barca
Object has been deleted: mass: 2000
speed: 250
power: 1.5
qualifier: 0
name: o_marca