删除模板数组时出现分段错误[重复]
Posted
技术标签:
【中文标题】删除模板数组时出现分段错误[重复]【英文标题】:Segmentation fault when deleting template array [duplicate] 【发布时间】:2020-06-30 15:48:05 【问题描述】:所以我需要创建一个包含对象对的动态大小数组,并且我有以下代码:
#include <utility>
#include <iostream>
#include <string>
using namespace std;
int main()
cout << "Hey #1" << endl;
pair<string, int> *array;
array = new pair<string, int>[4];
cout << "Hey #2" << endl;
delete array;
cout << "Hey #3" << endl;
我得到的输出是
Hey #1
Hey #2
Segmentation fault (core dumped)
这意味着当delete
运算符被调用时出现问题?
我在这里缺少什么?任何帮助将不胜感激!
【问题讨论】:
array = new pair<string, int>[4];
-- 你真正想在这里完成什么?其次,不要调用你的变量array
,因为标准 C++ 中存在一个std::array
类。
@PaulMcKenzie 创建一个包含 4 对的数组。
既然您说要创建一个数组,那么在删除数组时应该使用什么形式的delete
? std::array<std::pair<std::string, int>, 4>
也可以避免使用 new
。
@PaulMcKenzie 肯定不是我使用的那个。谢谢!
【参考方案1】:
需要使用操作符delete []
delete [] array;
【讨论】:
【参考方案2】:当你用new
分配对象时,你需要用delete
释放它们;当您使用new[]
分配对象时,您需要使用delete[]
释放它们。将您的代码更改为:
delete[] array;
【讨论】:
【参考方案3】:删除动态数组时,使用delete[]
而不是delete
删除多个动态分配的数据。希望这能解决您的问题。
【讨论】:
以上是关于删除模板数组时出现分段错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章