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。
我正在尝试使程序在 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。