删除数组c++崩溃问题
Delete array c++ crash issue
我分配了一个对象数组为:
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;
谁能帮帮我?提前谢谢你
您必须至少将 t_gc 的每个元素都置为 NULL,否则数组包含随机值,当您删除这些值时它会崩溃
GRBVar** t_gd = 0;
t_gd = new GRBVar* [numFl];
for (int i = 0; i < numFl; i++)
{
t_gd[i] = NULL;
}
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;
我分配了一个对象数组为:
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;
谁能帮帮我?提前谢谢你
您必须至少将 t_gc 的每个元素都置为 NULL,否则数组包含随机值,当您删除这些值时它会崩溃
GRBVar** t_gd = 0;
t_gd = new GRBVar* [numFl];
for (int i = 0; i < numFl; i++)
{
t_gd[i] = NULL;
}
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;