Problema con punteros en c
Publicado por pepe (4 intervenciones) el 26/04/2007 12:43:36
Hola: Tengo un problema en la siguiente función que he realizado y no sé porqué. A ver si me pueden ayudar:
El objetivo de esta función es el siguiente:
Tengo que generar una lista con varios nodos, y cada nodo tiene varios campos. Uno de los campos es generado aleatoriamente, y, tengo que comprobar si ya ha sido introducido en la lista, y si es así, volver al inicio de la lista, generar otro campo aleatoriamente, y buscar si está repetido, y así hasta que no se repita.
El problema radica en que no se actualiza la lista, y no sé la razón:
void lista_palabras (ptrNodoLista *ptrS, int n, int k){
int i;
char *valor;
ptrNodoLista ptrNuevo;
ptrNodoLista ptrActual;
ptrNodoLista ptrAnterior;
ptrAnterior = NULL;
ptrActual = *ptrS;
valor = (char*)malloc(n*sizeof(char));
for (i=0; i<(pow(2,k));i++){
ptrNuevo = malloc(sizeof(NodoLista));
genera_palabra_codigo(n,k,valor);
printf("El valor de la valor es %s\n",valor);
while(ptrActual != NULL){
if (memcmp(valor,ptrActual->simbolo_n,n) == 0){
genera_palabra_codigo(n,k,valor);
ptrActual = *ptrS;
}
if(memcmp(valor,ptrActual->simbolo_n,n) != 0){
ptrActual = ptrActual->ptrSiguiente;
}
}
if (( ptrNuevo != NULL )) { /* es espacio disponible */
ptrNuevo->simbolo_n = (char*)malloc(n*sizeof(char));
ptrNuevo->simbolo_k = (char*)malloc(k*sizeof(char));
decimal_binario(ptrNuevo->simbolo_k,i,k);
memcpy(valor,ptrNuevo->simbolo_n,n);
ptrNuevo->ptrSiguiente = NULL;
while (ptrActual !=NULL && memcmp(valor,ptrActual->simbolo_n,n) > 0){
ptrAnterior = ptrActual;
ptrActual = ptrActual->ptrSiguiente;
}
if (ptrAnterior == NULL){
ptrNuevo->ptrSiguiente = *ptrS;
*ptrS = ptrNuevo;
}
else{
ptrAnterior->ptrSiguiente = ptrNuevo;
ptrNuevo->ptrSiguiente = ptrActual;
}
}
else {
printf("No se inserto la cadena. No hay memoria disponible.\n");
}
ptrActual=*ptrS;
}
}
Gracias por adelantado.
El objetivo de esta función es el siguiente:
Tengo que generar una lista con varios nodos, y cada nodo tiene varios campos. Uno de los campos es generado aleatoriamente, y, tengo que comprobar si ya ha sido introducido en la lista, y si es así, volver al inicio de la lista, generar otro campo aleatoriamente, y buscar si está repetido, y así hasta que no se repita.
El problema radica en que no se actualiza la lista, y no sé la razón:
void lista_palabras (ptrNodoLista *ptrS, int n, int k){
int i;
char *valor;
ptrNodoLista ptrNuevo;
ptrNodoLista ptrActual;
ptrNodoLista ptrAnterior;
ptrAnterior = NULL;
ptrActual = *ptrS;
valor = (char*)malloc(n*sizeof(char));
for (i=0; i<(pow(2,k));i++){
ptrNuevo = malloc(sizeof(NodoLista));
genera_palabra_codigo(n,k,valor);
printf("El valor de la valor es %s\n",valor);
while(ptrActual != NULL){
if (memcmp(valor,ptrActual->simbolo_n,n) == 0){
genera_palabra_codigo(n,k,valor);
ptrActual = *ptrS;
}
if(memcmp(valor,ptrActual->simbolo_n,n) != 0){
ptrActual = ptrActual->ptrSiguiente;
}
}
if (( ptrNuevo != NULL )) { /* es espacio disponible */
ptrNuevo->simbolo_n = (char*)malloc(n*sizeof(char));
ptrNuevo->simbolo_k = (char*)malloc(k*sizeof(char));
decimal_binario(ptrNuevo->simbolo_k,i,k);
memcpy(valor,ptrNuevo->simbolo_n,n);
ptrNuevo->ptrSiguiente = NULL;
while (ptrActual !=NULL && memcmp(valor,ptrActual->simbolo_n,n) > 0){
ptrAnterior = ptrActual;
ptrActual = ptrActual->ptrSiguiente;
}
if (ptrAnterior == NULL){
ptrNuevo->ptrSiguiente = *ptrS;
*ptrS = ptrNuevo;
}
else{
ptrAnterior->ptrSiguiente = ptrNuevo;
ptrNuevo->ptrSiguiente = ptrActual;
}
}
else {
printf("No se inserto la cadena. No hay memoria disponible.\n");
}
ptrActual=*ptrS;
}
}
Gracias por adelantado.
Valora esta pregunta


0