c++ - 删除数组c++崩溃问题

标签 c++ arrays new-operator delete-operator

我已经分配了一个对象数组:

int numPlwDistanceClimb = 5;
int numFl = 6;
GRBVar** t_gd = 0;
t_gd = new GRBVar* [numFl];
GRBVar* x = 0;
x = model.addVars(numFl, GRB_CONTINUOUS);
for (int k = 0; k < numFl; k++)
{
    t_gd[k] = model.addVars(numPlwDistanceClimb, GRB_CONTINUOUS);          
}

我按如下方式删除数组,但不起作用。

 delete x;
 for (int i = 0; i < numFl; ++i)
 {
      delete t_gd[i];
 }
      delete [] t_gd;

有人可以帮助我吗?预先感谢您

最佳答案

I have allocated an array of object as:

不,您已经分配了指向对象的指针数组。 这意味着如果您想正确使用该数组,则必须分配该数组中的每个指针,否则尝试使用它们将导致未定义的行为。

GRBVar** t_gd = new GRBVar* [numFl];

for (int n = 0; n < numFl; n++)
{
    t_gd[i] = new GRBVar;
    // Or set them to nullptr
}

此外,如果您需要 C++ 中的指针数组,您可以使用 std::vector

std::vector<GRBVar *> t_gd;

您不必分配、释放资源,并且您有更多的可能性。

您也可以使用smart pointers

std::vector< std::unique_ptr< GRBVar > > t_gd;

关于c++ - 删除数组c++崩溃问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45862193/

相关文章:

c++ - 我们可以重载 malloc() 吗?

c++ - 平面的参数化生成

c++ - Win32 无法添加具有透明度的自定义工具栏图标

c++ - new 的内存分配

c++ - 什么是 "::operator new"和 "::operator delete"?

python - 如何计算 Numpy 数组中某个范围内的值?

c++ - 帮助我理解这个奇怪的 C++ 代码

c++ - (Mac) 将字符串参数从 VBA 传递到 dylib - 在 C++ 函数中接收到空字符串

c - 为什么不在函数内部执行printf?

java - 如何在二维数组中查找数字并排除一些?