problema con if

Iniciado por d91, 23 Octubre 2015, 03:26 AM

0 Miembros y 1 Visitante están viendo este tema.

d91

hola a todos, tengo una lista doblemente enlazada con nodos con una variable llamado "verificado" y siempre que sea su valor sea 1 de esta variable deberá entrar al if hasta que en algún momento sea 0, en un momento dado tengo un proceso mayor al quantum y la variable se pone en 1 y aumenta la bandera, el bucle se queda infinito al hacer una segunda comprobación de la lista porque todos aparecen con verificado = 0, y ya no puedo entrar a restar la bandera, no se si el error esta al poner la lista nuevamente al primer nodo
Código (cpp) [Seleccionar]

void SchedulerRoundRobin(Tlista &lista){

 OrdenarTiempoLlegada(lista);

 Tlista aux, tempLista;

 cont = 0;

  aux = lista;

  bandera = 0;

  do{

            while(lista != NULL){


                   if(lista->CPUaux > quantum ){

                        cont = cont + quantum;

                          bandera = bandera + 1;

                             lista->verificado = 1;


                             tempLista = lista->anterior; //adjudicando listatemporal

                            lista->espera = lista->espera + tempLista->enEjecutarse;

                             lista->CPUaux = lista->CPUaux - quantum;//aqui resto y al segundo recorrido

                             lista = lista->sgte;//el proceso ya no entrara


                       }//if del quantum//aqui porque sera menor al quantum;


                       else if(lista->verificado != 0){

                            if(lista->espera != 0){

                            bandera = bandera - 1;

                            }//if aux->espera

                            cont = cont + lista->CPUaux;

                            lista->verificado = 0;


                            lista->enEjecutarse = cont;

                            if(lista->anterior != NULL){

                            tempLista = lista->anterior; //adjudicando listaTemporal

                            lista->espera = lista->espera + tempLista->enEjecutarse;

                            }//if != NULL
                            else{

                            lista->espera = 0;

                            }//else

                            lista = lista->sgte;

                       }//else if

              }//while secundario

              lista = aux;//reiniciando la lista al primer nodo


     }while(bandera > 0);//while principal


}//calendarizacion turno circular



soyloqbuskas

¡ Buenas d91 !

EL problema del bucle infinito creo que lo tienes en la linea 15
Citarwhile(lista != NULL){
Para salir de ese bucle necesitas que en algun momento la variable lista sea igual a null y eso nunca ocurre, al final pones lista=aux; pero aux no esta inicializado a null asi que nunca salimos del bucle.

un saludo.
"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw

d91

la salida de ese bucle esta asegurado  en la línea 67, el problema lo tengo que al salir y la bandera vale 1 debe volver a recorrer la lista para ese entonces  el nodo valdra menos que el quantum y debería traer un 1 en la variable verificado y entrar en el siguiente if pero no lo hace y entonces se queda enciclado.

d91

hacer uso del turbo debugger quiere un poco de paciencia, pero al fin encontré el error, teniendo if anidados si en algún momento no entra en ninguno de los dos debe haber un else para adelantar la lista, o sea en teoría en el segundo recorrido estaba comparando el mismo nodo todas las veces y por eso quedaba enciclado