1

因此,我在为传递给我的 shape 类的构造函数的 char* 分配内存时遇到问题,我不断收到错误消息“malloc:*对象 0x1001000e0 的错误:未分配指针被释放”。我做了很多谷歌搜索,我找到了答案,但它们没有意义,我不明白出了什么问题。shapeName 是 shape 的受保护 char* 成员。方形是形状的孩子。如果有人能解释什么是错误的,将不胜感激,谢谢。

我的构造函数:

Shape::Shape(Point* origin,char* name) {
   this->origin = origin;
   this->shapeName = (char*) new char(strlen(name)+1);
   strcpy(shapeName, name);
}

我的析构函数:

Shape::~Shape() {
   delete shapeName;
   delete origin;
}

Square的构造函数:

Square::Square(Point* origin, char* squareName, double side) 
: Shape(origin, squareName){
   side_a = side;
}

我的电话:

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();
4

1 回答 1

5

这是你的问题:

this->shapeName = (char*) new char(strlen(name)+1);

您正在制作一个字符,并将其值设置为 strlen(name)+1。然后 strcpy() 超出(单字节)分配的末尾,并且尝试操作的堆结构“删除”被破坏。

这就是您想要的(不同的括号):

this->shapeName = new char[strlen(name)+1];

此外,如果您想正确,则必须使用一个特殊的“数组删除”:

delete[] shapeName;
于 2013-03-23T03:42:29.027 回答