c++ - 在 C++ 中动态分配 vector 的安全方法是什么

标签 c++ vector dynamic-allocation

动态分配结构后,我认为将“删除”放在末尾是明智的。但它给了我一个运行时错误。不过编译没问题。因此,如果我摆脱“删除”,它运行良好。但我担心可能会发生内存泄漏。处理此代码的安全方法是什么?

#include <iostream>
#include <vector>
using namespace std;

typedef struct
{
    vector<char*> vstr;
    vector<int> vint;

}VecStrInt;

int main()
{
    VecStrInt * mtx = new VecStrInt();

    mtx[0].vstr.push_back("Hello");
    mtx[0].vint.push_back(1);

    cout<<mtx[0].vint.at(0)<<endl;
    cout<<mtx[0].vstr.at(0)<<endl;

    //delete [] mtx;

    return 0;
}

最佳答案

delete[]的来电与delete的调用不一样(注意方括号)。

你配对调用 delete调用电话 new , 和电话 delete[]调用电话 new SomeType[someCount] .

在你的例子中,你分配了一个对象,而不是一个数组。你的对象恰好代表一个 vector ,它是一个数组,但这对 C++ 来说无关紧要:你用“单个”new 分配了它。 ,因此您不能应用“数组”delete[]

因此,您需要delete它使用常规的删除运算符:

delete mtx;

注意:很少有需要分配 std::vector<T> 的情况动态地。表示 std::vector<T> 的对象本身很小;数据存储在别处,并动态分配。所以你不妨使用

VecStrInt mtx;

并跳过delete完全。

关于c++ - 在 C++ 中动态分配 vector 的安全方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28697560/

相关文章:

c++ - 动态数组错误

c++ - 删除指针后将指针设为空是一种好习惯吗?

c++ - 编译三个 C++ 文件。链接错误

c++ - 简单程序的输入/输出问题。

c++ - 无法更改 WinAPI 中的编辑控制文本

c++ - 使用变换将映射键复制到 STL 中的 vector

C++ vector - push_back

c++ - 用于存储简单小数值的浮点替代方案

algorithm - 针对凸多面体形状类型转换胶囊

c - 为什么这个 C 代码不起作用?