|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Mar 2011
Messaggi: 1
|
[C++] Segmentation fault
Ciao a tutti.
Questo è il mio primo messaggio da utente principiante di C++. Mi trovo a dover programmare un progetto per un seminario che ho frequentato e ho alcune difficoltà, ricorrendo costantemente, al momento del run del programma, nel messaggio "segmentation fault". Ho cercato a lungo online suggerimenti su come risolvere questo problema. Nella maggior parte delle volte, sembra che questo problema ricorra se il programma non riesce ad uscire da un ciclo. Nel mio caso ho una versione del programma funzionante, aggiungo poi un nuovo if all'interno di un ciclo precedentemente esistente e questo mi crea la segnalazione di segmentation fault. Non capisco come risolvere questo problema. Provo a postare solo la parte del programma che va a creare problemi, specificando a seguire le mie variabili. Parte del programma funzionante, dove segno in rosso la parte che poi vado a modificare con un nuovo if: Codice:
for (int i=0; i<S; i++) { y=0; sum=0; while (y<T*h*Nt) { if (Demands[i]>sum*l) { //Demand of section i is not already satisfied sum1=0; sum2=0; sum3=0; sum4=0; sum5=0; sum7=0; sum9=0; temp1=Team[i][y]; temp2=Day[i][y]; temp3=TimeWindow[i][y]; //sum1 for (int j=0; j<S; j++) { for (int p=0; p<Nt; p++) { sum2=sum1+StaffRoster[j][temp1][temp2][p]; sum1=sum2; } } //sum3 for (int j=0; j<S; j++) { sum4=sum3+StaffRoster[j][temp1][temp2][temp3]; sum3=sum4; } FirstConsecutiveShift=temp3-1; SecondConsecutiveShift=temp3+1; //sum5 if (FirstConsecutiveShift<0) { sum5=0; } else { for (int j=0; j<S; j++) { if (StaffRoster[j][temp1][temp2][FirstConsecutiveShift]>0) { sum5=1; FirstSectionToCheck=j; } } } //sum7 if (SecondConsecutiveShift==Nt) { sum7=0; } else { for (int j=0; j<S; j++) { if (StaffRoster[j][temp1][temp2][SecondConsecutiveShift]>0) { sum7=1; SecondSectionToCheck=j; } } } //sum9 sum9=sum1-sum3-sum5-sum7; //Start procedure to assign shifts if (Holiday[temp2][temp1*2-1]+Holiday[temp2][temp1*2]>1) { y++; } else { if (sum9>0) { y++; } else { if (sum5>0) { if (Adjacent[i][FirstSectionToCheck]>0) { StaffRoster[i][temp1][temp2][temp3]=1; y++; sum++; } else { y++; } } else { if (sum7>0) { if (Adjacent[i][SecondSectionToCheck]>0) { StaffRoster[i][temp1][temp2][temp3]=1; y++; sum++; } } else { StaffRoster[i][temp1][temp2][temp3]=1; y++; sum++; } } } } } else { //Demand of section i is already satisfied y=T*h*Nt; } } } Codice:
int S, T, l, h, m, Nt; int FeasibleSections[s][T]; //che assume solo valori 0 e 1 int Adjacent[s][s]; //che assume solo valori 0 e 1 int Holiday[h][T*2]; //che assume solo valori 0 e 1 double Profits1[s]; double Profits2[Nt]; double Profits3[h]; double Costs[T][h*Nt]; int Demands[s]; Codice:
int Team[s][T*h*Nt]; int Day[s][T*h*Nt]; int TimeWindow[s][T*h*Nt]; int temp1, temp2, temp3, temp4; int StaffRoster[s][T][h][Nt]; //che assume solo valore 0 o 1 int y; int sum, sum1, sum2, sum3, sum4, sum5, sum7, sum9; int FirstConsecutiveShift, SecondConsecutiveShift, FirstSectionToCheck, SecondSectionToCheck; Codice:
for (int i=0; i<S; i++) { y=0; sum=0; while (y<T*h*Nt) { if (Demands[i]>sum*l) { //Demand of section i is not already satisfied sum1=0; sum2=0; sum3=0; sum4=0; sum5=0; sum7=0; sum9=0; temp1=Team[i][y]; temp2=Day[i][y]; temp3=TimeWindow[i][y]; //sum1 for (int j=0; j<S; j++) { for (int p=0; p<Nt; p++) { sum2=sum1+StaffRoster[j][temp1][temp2][p]; sum1=sum2; } } //sum3 for (int j=0; j<S; j++) { sum4=sum3+StaffRoster[j][temp1][temp2][temp3]; sum3=sum4; } FirstConsecutiveShift=temp3-1; SecondConsecutiveShift=temp3+1; //sum5 if (FirstConsecutiveShift<0) { sum5=0; } else { for (int j=0; j<S; j++) { if (StaffRoster[j][temp1][temp2][FirstConsecutiveShift]>0) { sum5=1; FirstSectionToCheck=j; } } } //sum7 if (SecondConsecutiveShift==Nt) { sum7=0; } else { for (int j=0; j<S; j++) { if (StaffRoster[j][temp1][temp2][SecondConsecutiveShift]>0) { sum7=1; SecondSectionToCheck=j; } } } //sum9 sum9=sum1-sum3-sum5-sum7; //Start procedure to assign shifts if (Holiday[temp2][temp1*2-1]+Holiday[temp2][temp1*2]>1) { y++; } else { if (sum9>0) { y++; } else { if (sum3>0) { y++; } else { if (sum5>0) { if (Adjacent[i][FirstSectionToCheck]>0) { StaffRoster[i][temp1][temp2][temp3]=1; y++; sum++; } else { y++; } } else { if (sum7>0) { if (Adjacent[i][SecondSectionToCheck]>0) { StaffRoster[i][temp1][temp2][temp3]=1; y++; sum++; } } else { StaffRoster[i][temp1][temp2][temp3]=1; y++; sum++; } } } } } else { //Demand of section i is already satisfied y=T*h*Nt; } } } Quali possono essere i possibili motivi di questa cosa? Vi ringrazio per l'aiuto e spero di aver inserito correttamente tutti i dati necessari per capire la mia domanda. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:37.