gnd*_*tro 1 c++ memory-management
所以我无法为传递到我的shape类的构造函数中的char*分配内存,我不断收到错误说"malloc:*对象0x1001000e0的错误:释放的指针未被分配".我做了很多谷歌搜索,我找到答案,但他们没有意义,我不明白什么是错的.shapeName是受保护的char*形状成员.广场是一个形状的孩子.如果有人能够解释哪些是错的,那将非常感谢,谢谢.
我的构造函数:
Shape::Shape(Point* origin,char* name) {
this->origin = origin;
this->shapeName = (char*) new char(strlen(name)+1);
strcpy(shapeName, name);
}
Run Code Online (Sandbox Code Playgroud)
我的析构函数:
Shape::~Shape() {
delete shapeName;
delete origin;
}
Run Code Online (Sandbox Code Playgroud)
Square的构造函数:
Square::Square(Point* origin, char* squareName, double side)
: Shape(origin, squareName){
side_a = side;
}
Run Code Online (Sandbox Code Playgroud)
我的电话:
Square s(new Point(5,7),"Square - S", 12);
s.display();
cout << "The area of " << s.getName() << " is: " << s.area() << endl;
cout << "The perimeter of " << s.getName() << " is: " << s.perimeter();
Run Code Online (Sandbox Code Playgroud)
这是你的问题:
this->shapeName = (char*) new char(strlen(name)+1);
Run Code Online (Sandbox Code Playgroud)
你正在创建一个char,并将其值设置为strlen(name)+1.strcpy()然后超出(单字节)分配的结束,并且堆结构'delete'尝试操作被破坏.
这是你想要的(不同的括号):
this->shapeName = new char[strlen(name)+1];
Run Code Online (Sandbox Code Playgroud)
此外,如果您想要正确,还必须使用特殊的"数组删除":
delete[] shapeName;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
156 次 |
| 最近记录: |