c++ - 调用函数时出现段错误

标签 c++ segmentation-fault

调用 Update_Multiplier 和 gdb 调试器时的段错误显示这些:

Program received signal SIGSEGV, Segmentation fault. 0x080b74e8 in Update_Multiplier() ()

double upperbound = 116325;
double objective = 1.1707e+07;
int main()
{
    Update_Multiplier();
}
void Update_Multiplier()
{
    cout << "function 0" << endl;
    // Determine subgradient vectors
    double gra[1000][1000];
    double grb[1000][1000];
    double dumX = 0;
    double stepsize[1000][1000];
    double tuning=2;
    double LRADum[1000][1000];
    double LRBDum[1000][1000];

    cout << "function 1" << endl;
    // update subgradient vectors
    for (int i=1; i<=noOfNodes; i++)
    {
        for (int j=1; j<=noOfNodes; j++)
        {
            if (C[i][j] != 0)
            {
                dumX=0;
                for (int p=1; p<=noOfCommodity; p++)
                {
                    dumX += X[i][j][p];
                }
                gra[i][j]=dumX-U[i][j]*Y[i][j]-Q[i][j];
                grb[i][j]=Q[i][j]-B[i][j]*Y[i][j];
            }
        }
    }

    // update stepsize
    cout << "function 2" << endl;
    for (int i=1; i<=noOfNodes; i++)
    {
        for (int j=1; j<=noOfNodes; j++)
        {
            if (C[i][j] != 0)
            {
                stepsize[i][j]=(tuning*(UpperBound-Objective))/sqrt((gra[i][j]*gra[i][j])*(grb[i][j]*grb[i][j]));
                LRADum[i][j]=LRA[i][j]+stepsize[i][j]*gra[i][j];
                LRA[i][j]=LRADum[i][j];
                LRBDum[i][j]=LRB[i][j]+stepsize[i][j]*grb[i][j];
                LRB[i][j]=LRBDum[i][j];

            }
        }
    }

}

最佳答案

我在您的代码中看到两个可疑的地方。

首先,您占用了过多的堆栈空间(大约 40 MB)。
其次,您将数组的索引从 1 开始,它应该是 0:

for (int i=1; i<=noOfNodes; i++)

将其更改为:

for (int i=0; i<noOfNodes; i++)

关于c++ - 调用函数时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2118011/

相关文章:

C++ 异常处理 : defining exception as object

c - memcpy(dst, src, n) 之后的 free(src) 导致段错误

c++ - 模板隐式实例化和内联成员

c++ - 如何将 Wt 安装到没有 "fatal error: Wt/WApplication: No such file or directory"的自定义文件夹中

C++ Builder 2009 同步

c - 当我 scanf(%s,lastName); 时遇到段错误(正文代码在里面)

segmentation-fault - getAnalysis<DominatorTree>() 上的 LLVM 传递段错误

c fscanf for ints 导致段错误

c - 为什么一个段有故障而另一个段没有故障?

c++ - 如何使用私有(private)继承的方法覆盖纯虚方法?