删除数组c ++崩溃问题

时间:2017-08-24 12:53:30

标签: 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;

任何人都可以帮助我吗?提前谢谢

2 个答案:

答案 0 :(得分:2)

  

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

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

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;

答案 1 :(得分:0)

您必须至少将t_gc的每个元素都设置为NULL,否则该数组包含随机值,当您删除它们时它会崩溃

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

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