无法写入使用 malloc 初始化的位置



我试图测试程序的一部分是否正常工作,但在运行以下代码时,

Car *carList;
carList = (Car*) malloc (length * sizeof(Car));
carList[0].setMake("a");
carList[0].setModel("b");
carList[0].setYear("c");
carList[0].setColor("d");
carList[0].printCar();

程序在第一个函数调用setMake中遇到问题。这是我的汽车等级:

class Car {
private:
string cmake;
string cmodel;
string cyear;
string ccolor;
public:
Car(){};
Car(string *cmake, string *cmodel, string cyear, string *ccolor);
void printCar(){
cout << "Make: " << cmake << endl;
cout << "Model: " << cmodel << endl;
cout << "Year: " << cyear << endl;
cout << "Color: " << ccolor << endl << endl;
return;
};
string getMake(){return cmake;};
string getModel(){return cmodel;};
string getYear(){return cyear;};
string getColor(){return ccolor;};
void setMake(string a){cmake = a;};
void setModel(string a){cmodel = a;};
void setYear(string a){cyear = a;};
void setColor(string a){ccolor = a;};
};

当它试图执行函数setMake时,我得到一个错误,上面写着

No source available for "libstdc++-6!_ZN9__gnu_cxx9free_list8_M_clearEv()     at 0x6fc59021" 

有人能告诉我我做错了什么吗?提前谢谢。

必须使用new而不是malloc,因为C++对象必须使用构造函数调用进行初始化。

在这种特殊情况下,错误是由于未构造的string对象造成的。

malloc只分配内存,不初始化C++对象。看起来你想要一个动态大小的Car集合,所以std::vector<Car>对你来说会更好:

std::vector<Car> carList (length);
carList[0].setMake("a"); //assuming length>0
carList[0].setModel("b");
carList[0].setYear("c");
carList[0].setColor("d");
carList[0].printCar();

这将创建一个length大小的std::vector默认初始化的Cars,然后在矢量中的第一个对象上设置请求的属性并打印它

相关内容

  • 没有找到相关文章

最新更新