无法在c ++中为char *分配内存

时间:2013-03-23 03:38:17

标签: c++ memory-management

所以我无法为传递到我的shape类的构造函数的char *分配内存,我不断收到错误说“对象0x1001000e0的malloc: * 错误:指针被释放没有分配“。我做了很多谷歌搜索,我找到答案,但他们没有意义,我不明白什么是错的。 shapeName是受保护的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();

1 个答案:

答案 0 :(得分:5)

这是你的问题:

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

您正在创建一个字符,并将其值设置为strlen(name)+1。 strcpy()然后超出(单字节)分配的结束,并且堆结构'delete'尝试操作被破坏。

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

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

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

delete[] shapeName;