000
02.06.2005, 22:27 Uhr
Solour
|
hi,
ist sicher blos ein kleiner fehler aber ich komme einfach net drauf...
die liste mit der ich arbeite...
C++: |
struct pList{ int pid; struct pList* nxt; };
extern struct pList *procLst;
|
das einfügen eines elementes
C++: |
struct pList* newElem= malloc( sizeof(struct pList) ); newElem->pid= cur_job; newElem->nxt= procLst; procLst= newElem;
|
das anzeigen der liste...
C++: |
#ifdef DEBUG2 void printProcLst() { struct pList *pl= procLst; fprintf(stderr, "[D*] %d: \n", procLst->pid); while((procLst= procLst->nxt)!=NULL) fprintf(stderr, "[D*] %d: \n", procLst->pid); procLst= pl; } #endif
|
das löschen eines elementes (hier geht was schief)
C++: |
tmp= wait(NULL); #ifdef DEBUG2 fprintf(stderr, "[D] %d finished\n", tmp); #endif /* remove this process from list */ #ifdef DEBUG2 printProcLst(); printProcLst(); #endif if(procLst->pid==tmp) { fprintf(stderr, "simp\n"); struct pList *xprocLst= procLst; procLst= procLst->nxt; free(xprocLst); } else { fprintf(stderr, "ELSE\n"); procLst= procLst->nxt; struct pList* first= procLst; struct pList* prev= procLst; fprintf(stderr, "ELSE2\n"); do{ if(procLst == NULL) smoothExit(EXT_UNKNWON_PROC); fprintf(stderr, "ELSE3\n"); if(procLst->pid == tmp) { fprintf(stderr, "ELSE4\n"); prev->nxt= procLst->nxt; free(procLst); break; }else{ prev= procLst; fprintf(stderr, "ELSE5\n"); } fprintf(stderr, "ELSE6\n"); }while((procLst= procLst->nxt)!=NULL); fprintf(stderr, "ELSE7\n"); procLst= first; } #ifdef DEBUG2 printProcLst(); #endif
|
hier nochmal die ausgabe, [D] 4597 finished heißt, das 4597 aus der lsite entfernt werden soll [D*] 4598: [D*] 4597: [D*] 4598: [D*] 4597: ist eine 2-malige ausgabe der liste (die ausgabe scheint nix an der liste zu ändern) ELSE ELSE2 ELSE3 ELSE4 ELSE7 um zu löschen wird dieser weg verfolgt 12 12 95 eine asynchrone einmischung...(nicht wichtig(ist der prozess 4598 der auch gleich fertig ist...(wc))) [D*] 4597: eine einmalige ausgabe der liste (HIER SCHON FALSCH!! das falsche ist entfernt) darunter kommt dann ne segfault, aber das interesseirt mich schon kaum noch, würde sich schon von selbst lösen denk ich, wenn der obige fehler weg wäre...
Code: |
> ls|wc [D] 4597 finished [D*] 4598: [D*] 4597: [D*] 4598: [D*] 4597: ELSE ELSE2 ELSE3 12 12 95 ELSE4 ELSE7 [D*] 4597: [D] 4598 finished [D*] 4597: [D*] 4597: ELSE ELSE2 [Error] unknwon process ELSE3 Segmentation Fault
|
mfg Sven Dieser Post wurde am 02.06.2005 um 22:28 Uhr von Solour editiert. |