Ik moet voor de uni een lift simulatie maken, en hierbij ben ik nu op een vervelende segfault gekomen.
ik heb de fout terug kunnen lijden tot een if statement.
hieronder de code van de betreffende functie:
hij doorloopt de code meerdere malen, echter bij de tweede run geeft hij bij de if(j!=0) in regel 16 een segmentation fault.
de eerste maal is j nog 0, en dan gaat hij naar de else, (elevator=idle)
2e maal issie op 2 ingesteld (going down) maar dan krijg ik dus een seg fault, eerst had ik het if statement met de (*el).state, maar vanwege de segfault toen in een int gestopt, die geeft echter dezelfde fout bij het if statement. het printen met printf werkt wel gewoon.
type defs in de bijbehorende header files:
ik heb de fout terug kunnen lijden tot een if statement.
hieronder de code van de betreffende functie:
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
| static T_passenger passenger; T_passenger *pickup_passenger(T_elevator *el) { /*T_passenger *passenger; passenger = malloc(sizeof(T_passenger)); if (passenger == NULL){ printf("malloc error\n"); exit(1); } */ printf("pickup passenger...\n"); int i; /* first check idle state */ printf("state = %d",(*el).state); int j = (*el).state; printf(". or %d\n", j); if (j != 0){ printf("elevator!=IDLE "); for(i = 0; i < MAX_PASSENGERS; i++){ if ((*pqueue[(*el).location].waiting[i]).direction == (*el).state){ printf("Same direction..."); passenger = (*pqueue[(*el).location].waiting[i]); pqueue[(*el).location].waiting[i] = 0; pqueue[(*el).location].total--; if((*el).state == MOVING_UP) {pqueue[(*el).location].up--;} if((*el).state == MOVING_DOWN) {pqueue[(*el).location].down--;} printf("Completed\n"); return &passenger; } } } else{ printf("elevator==IDLE "); for(i = 0; i < MAX_PASSENGERS; i++){ if (pqueue[(*el).location].waiting[i] != 0){ passenger = (*pqueue[(*el).location].waiting[i]); pqueue[(*el).location].waiting[i] = 0; pqueue[(*el).location].total--; if(passenger.direction == PASSENGER_UP) {pqueue[(*el).location].up--;} if(passenger.direction == PASSENGER_DOWN) {pqueue[(*el).location].down--;} (*el).state = passenger.direction; printf("Completed\n"); return &passenger; } } } printf("no waiting people"); exit(1); } |
hij doorloopt de code meerdere malen, echter bij de tweede run geeft hij bij de if(j!=0) in regel 16 een segmentation fault.
de eerste maal is j nog 0, en dan gaat hij naar de else, (elevator=idle)
2e maal issie op 2 ingesteld (going down) maar dan krijg ik dus een seg fault, eerst had ik het if statement met de (*el).state, maar vanwege de segfault toen in een int gestopt, die geeft echter dezelfde fout bij het if statement. het printen met printf werkt wel gewoon.
type defs in de bijbehorende header files:
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| typedef struct T_passenger { int floor; int dest; int direction; /* * Needed: current floor, destination floor and * Direction based on floor and dest. */ } T_passenger; typedef struct T_elevator { int state; int door; int location; int nr_passengers; int req_floors[NR_OF_FLOORS]; struct T_passenger *passengers[ELEVATOR_CAPACITY]; } T_elevator; |
[ Voor 4% gewijzigd door Elephtera op 08-03-2006 11:19 ]
“An elephant is a mouse with an operating system”