Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
析构函数/释放内存问题 所以我对C++很陌生,我正在尝试一些基本的动态内存分配,我已经遇到了一些问题。我不确定我做错了什么,但我无法运行以下代码:_C++_Class_Memory_Destructor - Fatal编程技术网

析构函数/释放内存问题 所以我对C++很陌生,我正在尝试一些基本的动态内存分配,我已经遇到了一些问题。我不确定我做错了什么,但我无法运行以下代码:

析构函数/释放内存问题 所以我对C++很陌生,我正在尝试一些基本的动态内存分配,我已经遇到了一些问题。我不确定我做错了什么,但我无法运行以下代码:,c++,class,memory,destructor,C++,Class,Memory,Destructor,类别声明: class Car { double maxSpeed; bool isNew; char* manufacturerName; public: Car(double = 0, bool = true, char* = "Unknown"); ~Car(); Car& operator=(const Car&); }; 构造函数实现: Car::Car(double maxSpeed, bool isNew, c

类别声明:

class Car {
    double maxSpeed;
    bool isNew;
    char* manufacturerName;

public:
    Car(double = 0, bool = true, char* = "Unknown");
    ~Car();
    Car& operator=(const Car&);


};
构造函数实现:

Car::Car(double maxSpeed, bool isNew, char* manufacturerName) {
    this->maxSpeed = maxSpeed;
    this->isNew = isNew;
    this->manufacturerName = new char[strlen(manufacturerName)];
    strcpy(this->manufacturerName, manufacturerName);
}
Car::~Car() {
    delete [] manufacturerName;
}
析构函数实现:

Car::Car(double maxSpeed, bool isNew, char* manufacturerName) {
    this->maxSpeed = maxSpeed;
    this->isNew = isNew;
    this->manufacturerName = new char[strlen(manufacturerName)];
    strcpy(this->manufacturerName, manufacturerName);
}
Car::~Car() {
    delete [] manufacturerName;
}
主要内容:

int main() {

    Car C(250.0, true, "Name1");
    Car C1(180.0, false, "Name2");
    Car C2;    
    cout << C << C1 << C2;

    return 0;
}
intmain(){
C车(250.0,正确,“名称1”);
汽车C1(180.0,假,“名称2”);
汽车C2;

您必须为构造函数中的字符串分配strlen(…)+1字节,以便为结尾的零字节分配amomdate。您正在写入的字节比您目前分配的多1字节。

您必须分配strlen(…)+构造函数中的字符串为1字节,结尾为0字节。你现在比分配的多写了1字节。

你听说过std::string吗?还是这是一个糟糕的大学作业,你必须在“课堂内用C”编程永远是一个坏的C++开发者?是的,这是一个大学作业,我必须使用C风格字符串。可能复制的制造商名称应该被设置为<代码>新的char [斯特伦(厂商名称)+1 ] <代码> YEP,我知道。你听说过STD::String吗?还是你在编程中的这些蹩脚大学作业中的一个?“C类在内部”,永远是一个坏的C++开发者?是的,这是一个大学作业,我必须使用C风格字符串。可能复制的制造商名称应该设置为<代码>新char [斯特伦(厂商名称)+ 1 ] < /代码> YEP,我知道。