C++中使用operator delete的段错误

Segmentation fault using operator delete in C ++

我正在尝试使程序在 C++ 中运行。当我创建一个 class 的实例并引用它时,一切都很好:

PolyCRTBuilder test1(parms);
PolyCRTBuilder *p = &test1;

但是当我使用动态分配创建实例时,在我尝试释放内存时出现分段错误:

PolyCRTBuilder *test2 = new PolyCRTBuilder(parms);
cout << "test2 variable created" << endl;
delete [] test2;
cout << "test2 variable deleted" << endl;

最后一个代码returns我

test2 variable created

Segmentation fault

这是为什么?

delete [] test2;删除了一个数组,但是你创建了一个普通的对象。请尝试 delete test2;

您还应该熟悉智能指针,例如unique_ptr 和shared_ptr。原始指针在现代 C++ 中是糟糕的风格,使您的程序容易出错。

如果你用new []

分配,你就用delete[]

即数组分配

不要混用。

所以你分配了:

new PolyCRTBuilder(parms);

所以,就这样删除

delete test2;

PolyCRTBuilder test1(parms);
PolyCRTBuilder *p = &test1;

如您所见,这不是动态内存,因为您知道它不能用 delete 运算符删除

PolyCRTBuilder *test2 = new PolyCRTBuilder(parms);
cout << "test2 variable created" << endl;
delete  test2;
cout << "test2 variable deleted" << endl;

但是当您创建动态内存时,您必须在最后删除,所以这只是单个变量,可以使用 delete 运算符删除,因此请如上所述使用 delete。