在C ++中使用operator delete进行分段错误

时间:2018-04-01 17:08:37

标签: c++ segmentation-fault delete-operator

我试图让程序在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变量

     

分段错误

为什么会这样?

3 个答案:

答案 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如上所述。