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