我分配了一个对象数组为:

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;

谁能帮我?先感谢您

最佳答案



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

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;

09-13 13:12