Originally posted by: Ximenes
Hi, everybody, I run a program in C++ calling cplex. But it returns following problem.
try etsp.exe 中的 0x0130a144 处有未经处理的异常: 0xC0000005: 读取位置 0xbaadf011 时发生访问冲突
The codes are as follows:
#include <ilcplex/ilocplex.h> ILOSTLBEGIN typedef IloArray<IloBoolVarArray> BoolVarMatrix; typedef IloArray<IloNumArray> NumMatrix; typedef IloArray<IloNumVarArray> NumVarMatrix; typedef IloArray<BoolVarMatrix> BoolVar3Matrix;
int main(
int argc, char** argv)
{ IloEnv env;
try
{
const char* filename;
if (argc > 1) filename = argv[1];
else filename =
"C:\\Users\\Ximenes\\Desktop\\try1.txt"; ifstream f(filename, ios::in);
if (!f)
{ cerr <<
"No such file: " << filename << endl;
throw(1);
} IloNum T; IloNumArray2 r(env); IloNumArray2 p1(env); IloNumArray2 p2(env); IloNumArray2 s(env); f >> T; f >> r; f >> p1; f >> p2; f>>s; cout<<
"T="<<T<<endl; cout<<
"r="<<r<<endl; cout<<
"p1="<<p1<<endl; cout<<
"p2="<<p2<<endl; cout<<
"s="<<s<<endl;
int N=r.getSize(); cout<<
"N="<<N<<endl;
for(
int i=0;i<N;i++)
{ cout<<
"r["<<i<<
"]="<<r[i]<<endl; cout<<
"p1["<<i<<
"]="<<p1[i]<<endl; cout<<
"p2["<<i<<
"]="<<p2[i]<<endl;
} IloIntArray n(env,N); IloInt total=0;
for(
int i=0;i<N;i++)
{ n[i]=r[i].getSize(); cout<<
"n["<<i<<
"]="<<n[i]<<
","; total+=n[i];
} cout<<
"total="<<total<<endl; IloModel model(env); BoolVar3Matrix z(env,N);
for(
int i=0;i<N;i++)
{ z[i]=BoolVarMatrix(env,n[i]);
for(
int j=0;j<n[i];j++)
{ z[i][j]=IloBoolVarArray(env,total);
}
} BoolVarMatrix y(env,N);
for(
int i=0;i<N;i++) y[i]=IloBoolVarArray(env,n[i]); BoolVarMatrix t(env,total-1);
for(
int i=0;i<total-1;i++) t[i]=IloBoolVarArray(env,total-i-1); IloNumVarArray I(env,total-1,0,T); IloNumVarArray W(env,total,0,T); IloExpr expr(env);
for(
int i=0;i<N;i++)
{
for(
int j=0;j<n[i];j++)
{ expr+=z[i][j][0]*p1[i][j]*y[i][j]; expr+=p2[i][j]*y[i][j];
}
}
for(
int i=0;i<total-1;i++)
{ expr+=I[i];
}
for(
int m=0;m<total-1;m++)
{
for(
int h=m+1;h<total;h++)
{
for(
int i=0;i<N;i++)
{
for(
int k=0;k<n[i];k++)
{
for(
int j=0;j<N;j++)
{
for(
int l=0;l<n[j];l++) expr+=z[i][k][m]*y[i][k]*z[j][l][h]*y[j][l]*s[i][j]*t[m][h];
//读取位置 0xbaadf011 时发生访问冲突!!!!!!
}
}
}
}
} model.add(expr<=T); expr.end();
Thank you.
#CPLEXOptimizers#DecisionOptimization