분할 오류를 호출했을 때세그먼트의 결함 Update_Multiplier를 호출하고 GDB 디버거이 표시되면 함수
프로그램 신호 SIGSEGV 세그멘테이션 결함을 받았다. 추측에서 Update_Multiplier에서 0x080b74e8()()
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];
}
}
}
}
흠, 아마도 40MB의 스택 공간이 필요합니다. 플랫폼이란 무엇이며 스택에 할당 된 메모리 양을 알고 있습니까? –
그는 다른 누구도 알지 못하는 256 비트 프로세서, ~ 200TB RAM이있는 컴퓨터 중 하나를 프로그래밍하고 있다고 생각합니다. – pyon
솔직히 말해서, 그것이 세그 폴트 (segfault)가되는 것은 꽤 놀랍습니다. Cout, endl, noOfNodes, C, noOfCommodity, X, U, Y, Q, B, UpperBound 선언을 볼 수 없습니다. ,'Objective','sqrt','LRA','LRB'입니다. 또한 'main'에서 호출 된 Update_Multiplier에 대한 선언이 없습니다. –