“如何修复”;0xC0000005:访问冲突读取位置“;在C++; 最近我一直在学习如何在C++中编写优化程序。在建立优化模型后,我一直收到相同的消息:

“如何修复”;0xC0000005:访问冲突读取位置“;在C++; 最近我一直在学习如何在C++中编写优化程序。在建立优化模型后,我一直收到相同的消息:,c++,cplex,C++,Cplex,有人能帮帮我或告诉我那里发生了什么事吗?非常感谢 #包括ILOSTLBEGIN typedef-ilomvararray2; int main(int argc,char∗∗argv){ 伊洛恩温; 试一试{ 常量字符; i oint i,j; IloModel-mod(env); IloNumVarArray2 x(环境); 对于(i=0;i=500);; mod.add(x[0][1]+x[1][1]+x[2][1]+x[3][1]>=600);; 模加(x[0][2]+x[1][2]+x[

有人能帮帮我或告诉我那里发生了什么事吗?非常感谢

#包括ILOSTLBEGIN
typedef-ilomvararray2;
int main(int argc,char∗∗argv){
伊洛恩温;
试一试{
常量字符;
i oint i,j;
IloModel-mod(env);
IloNumVarArray2 x(环境);
对于(i=0;i<3;i++){
x、 添加(Ilonumvarray(env,2,0.0,IlonInfinity));
}
修改添加(ILO)(
环境保护署,6.5*x[0][0]+11*x[0][1]+9.75*x[1][0]+12.25*x[1][1]+
9.5*x[1][2]+4.75*x[2][0]+7.75*x[2][1]+
8.5*x[2][2]+7.5*x[3][0]+8.5*x[3][1]);
mod.add(x[0][0]+x[1][0]+x[2][0]+x[3][0]>=500);;
mod.add(x[0][1]+x[1][1]+x[2][1]+x[3][1]>=600);;
模加(x[0][2]+x[1][2]+x[2][2]+x[3][2]>=500);;

mod.add(x[0][0]+x[0][1]与建议评论中的人一样,使用调试器跟踪问题。更好的方法是:在调试模式下编译程序。IloCplex代码在头文件中包含大量捕获常见错误的断言。在调试模式下运行代码会导致此断言失败:

X& IloArray::operator[] (IloInt i) : Out of bounds operation: index superior to size of array
segfault2.bin++: concert/include/ilconcert/iloenv.h:2246: X& IloArray<X>::operator[](IloInt) [with X = IloNumVarArray; IloInt = long int]: Assertion `(i < _impl->getSize()) || (std:: cerr << "X& IloArray::operator[] (IloInt i) : Out of bounds operation: index superior to size of array" << std:: endl, ilo_stop_assert())' failed.
Aborted

您正在访问
x[3][*]
,尽管
x
数组只有3个元素。因此,只有索引0、1、2对该数组有效。此外,您正在访问
x[*][2]
在某些地方,虽然数组的第二维度只有2。

如果我读对了这段代码,
x
只有三行,但您可以作为
x[3][0]
(第四行)访问它。
x
的每个元素只有两列,但是您可以访问
x[2][2]
(第三列)。当您使用调试器运行程序时,您看到了什么?这就是调试器的用途。如果您不知道如何使用调试器,这是一个很好的机会,可以学习如何使用调试器一次运行一行程序,监视所有变量及其值的变化,并分析程序的逻辑执行流。了解h使用调试器是每个C++开发人员所需的技能,没有例外。在调试器的帮助下,您应该能够快速找到您编写的所有和将来的程序中的所有错误,而不必向任何人求助。@ OP使用VisualStudio,调试非常简单。调用堆栈会准确地向您显示导致问题的行,您只需单击一个按钮关闭该框并转到调用堆栈窗口。非常简单。Botje:谢谢您的澄清!Sam和Paul:谢谢您的提示!我现在使用Visual Studio,使用调试器后,我得到了一个ilonev.h文件,并且屏幕截图作为问题描述中的链接添加。我不知道报告的问题在我的模型中的位置,因为行号不匹配(我只有不到50行)。
mod.add(IloMaximize(
    env, 6.5 * x[0][0] + 11 * x[0][1] + 9.75 * x[1][0] + 12.25 * x[1][1] +
             9.5 * x[1][2] + 4.75 * x[2][0] + 7.75 * x[2][1] +
             8.5 * x[2][2] + 7.5 * x[3][0] + 8.5 * x[3][1]));