删除模板数组时出现分段错误[重复]

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&lt;string, int&gt;[4]; -- 你真正想在这里完成什么?其次,不要调用你的变量array,因为标准 C++ 中存在一个std::array 类。 @PaulMcKenzie 创建一个包含 4 对的数组。 既然您说要创建一个数组,那么在删除数组时应该使用什么形式的deletestd::array&lt;std::pair&lt;std::string, int&gt;, 4&gt; 也可以避免使用 new @PaulMcKenzie 肯定不是我使用的那个。谢谢! 【参考方案1】:

需要使用操作符delete []

delete [] array;

【讨论】:

【参考方案2】:

当你用new分配对象时,你需要用delete释放它们;当您使用new[] 分配对象时,您需要使用delete[] 释放它们。将您的代码更改为:

delete[] array;

【讨论】:

【参考方案3】:

删除动态数组时,使用delete[] 而不是delete 删除多个动态分配的数据。希望这能解决您的问题。

【讨论】:

以上是关于删除模板数组时出现分段错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 C 中创建大型数组时出现分段错误

分配时出现分段错误[重复]

删除时出现分段错误

返回指针时出现分段错误[重复]

初始化数组时出现段错误

处理删除命令时出现分段错误