我试图让程序在c ++中运行。当我创建一个类的实例并获取它的引用时,一切都很好:
PolyCRTBuilder test1(parms);
PolyCRTBuilder *p = &test1;
但是当我使用动态分配来创建实例时,它会在我尝试释放内存时给出一个分段错误错误:
PolyCRTBuilder *test2 = new PolyCRTBuilder(parms);
cout << "test2 variable created" << endl;
delete [] test2;
cout << "test2 variable deleted" << endl;
这最后一段代码给我回复
创建了test2变量
分段错误
为什么会这样?
答案 0 :(得分:1)
delete [] test2;
删除数组,但您创建了一个普通对象。请改为delete test2;
。
您还应该熟悉智能指针,例如unique_ptr和shared_ptr。原始指针在现代C ++中是不好的样式,并且使程序容易出错。
答案 1 :(得分:0)
如果您使用delete[]
new []
用于数组分配
不要混合它们。
所以你分配了:
new PolyCRTBuilder(parms);
所以,只需像这样删除
delete test2;
答案 2 :(得分:0)
PolyCRTBuilder test1(parms);
PolyCRTBuilder *p = &test1;
正如您所知,这不是动态内存,因为您知道无法使用删除操作符
删除它PolyCRTBuilder *test2 = new PolyCRTBuilder(parms);
cout << "test2 variable created" << endl;
delete test2;
cout << "test2 variable deleted" << endl;
但是当你创建动态内存时,你必须在最后删除所以这只是单个变量,可以用delete
运算符删除,所以使用delete如上所述。