C/Visual C - Ayuda doblespunteros en C

   
Vista:

Ayuda doblespunteros en C

Publicado por des (7 intervenciones) el 07/01/2010 22:28:31
Y vuelvo a tener problemas con otro ejercicio de dobles punteros : ( y de nuevo sigo sin saber donde esta el problema, maso menos lo tengo localizado pero.... no logro verlo del todo.

El programa es simple, vas introduciendo frases y al final debe mostrarlas ordenadas alfabeticamente, la cosa es que hay que hacerlo con dobles punteros y aumentando el malloc por asi decirlo de 1 en 1 a cada frase que pongas hasta que pones un "0", lo de ordenar no lo veo complicado, el asunto es que no consigo que me guarde las frases que voy poniendo, hace "algo" pero... pongo el codigo:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

main(){
char** frases;
char** frasesTemp;
char frase[100];
int contador=0,x,y,longitud;

while(strcmp("0",frase)!=0){

frases=(char**)malloc((contador+1) * sizeof(char*));
//Rellenamos "frases" con "frasesTemp" antes de perder lo de "frasesTemp"
for(x=0;x<contador;x++){
for(y=0;y<strlen(frasesTemp[x]);y++){
frases[x][y]=frasesTemp[x][y];
}
frases[x][y]='\0';
printf("COMPROBACION: Frase copiada a frases[%d]= %s\n",x,frases[x]);
free(frasesTemp); //ESTO POR QUE!?!?!
}
//Rellenamos "frases" con "frasesTemp" antes de perder lo de "frasesTemp"
//Introducimos una frase y reservamos tantas posiciones como letras tenga
frasesTemp=(char**)malloc((contador+1) * sizeof(char*));
printf("\nIntroduce una frase: ");
gets(frase);
if(strcmp("0",frase)!=0){
*(frases+contador)=(char*)malloc((strlen(frase)+1) * sizeof(char));
*(frasesTemp+contador)=(char*)malloc((strlen(frase)+1) * sizeof(char));
//Introducimos una frase y reservamos tantas posiciones como letras tenga
//Metemos en frases[x][y] la frase recien introducida
for(x=0;x<strlen(frase);x++){
frases[contador][x]=frase[x];
}
frases[contador][x]='\0';
printf("COMPROBACION: Frase introducida en frases[%d]= %s\n",contador,frases[contador]);
//Metemos en frases[x][y] la frase recien introducida
//Rellenamos "frasesTemp" con "frases"
for(x=0;x<=contador;x++){
for(y=0;y<strlen(frases[x]);y++){
frasesTemp[x][y]=frases[x][y];
}
frasesTemp[x][y]='\0';
printf("COMPROBACION: Frase copiada a frasesTemp[%d]= %s\n",x,frasesTemp[x]);
}
//Rellenamos "frasesTemp" con "frases"
}
contador++;
}
printf("\nResultado: \n");
for(x=0;x<contador-1;x++){
for(y=0;y<strlen(frases[x]);y++){
printf("%c",frases[x][y]);
}
printf("\n");
}
system("pause");
free(frases);
free(frasesTemp);
}

El problema viene en la segunda frase, que en el trozo de "//Metemos en frases[x][y] la frase recien introducida" de repente, frases[x] cambia... si has puesto hola, en la prmera frase, y pepito en la segunda, en mitad del for cambia a "hola"... :S algun problema que veais asi directamente? :S

Gracias de antemano por leer el post :)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ayuda doblespunteros en C

Publicado por Tom (478 intervenciones) el 08/01/2010 12:00:54
Revisa el código que has pegado. ¿ Por qué empiezas examinando frase cuando aún ni está inicializada ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda doblespunteros en C

Publicado por des (7 intervenciones) el 08/01/2010 14:32:52
xD ya ya esque ayer estaba bastante "encanado" como decimos por aqui y ya ni veia bien, ya al final lo pude terminar bien, esta noche lo entregare lo dejo por si alguien cree que algo de lo que hago podria mejorarse, la menera de hacerse por asi decirlo : ) gracias Tom por molestarte en verlo :)

main(){
char** frases = NULL;
char** frasesTemp = NULL;
char frase[100];
int contador=0,x,y;
while(strcmp("0",frase)!=0){
if(frases!=NULL){free(frases);}
frases=(char**)malloc((contador+1) * sizeof(char*));
//Rellenamos "frases" con "frasesTemp" antes de perder lo de "frasesTemp"
for(x=0;x<contador;x++){
*(frases+x)=(char*)malloc((strlen(frasesTemp[x])+1) * sizeof(char));
strcpy(frases[x],frasesTemp[x]);
}
//Rellenamos "frases" con "frasesTemp" antes de perder lo de "frasesTemp"
//Liberamos frasesTemp y volvemos a reservar las posiciones que va a necesitar
free(frasesTemp);
frasesTemp=(char**)malloc((contador+1) * sizeof(char*));
for(x=0;x<contador;x++){
*(frasesTemp+x)=(char*)malloc((strlen(frases[x])+1) * sizeof(char));
}
//Liberamos frasesTemp y volvemos a reservar las posiciones que va a necesitar
//Introducimos una frase y reservamos tantas posiciones como letras tenga
printf("Introduce una frase: ");
gets(frase);
if(strcmp("0",frase)!=0){
*(frases+contador)=(char*)malloc((strlen(frase)+1) * sizeof(char));
*(frasesTemp+contador)=(char*)malloc((strlen(frase)+1) * sizeof(char));
//Introducimos una frase y reservamos tantas posiciones como letras tenga
strcpy(frases[contador],frase); //Metemos en frases[x] la frase recien introducida
//Rellenamos "frasesTemp" con "frases"
for(x=0;x<=contador;x++){
strcpy(frasesTemp[x],frases[x]);
}
//Rellenamos "frasesTemp" con "frases"
}
contador++;
}
printf("\nResultado: \n");
ordenar(frases,contador);
for(x=0;x<contador-1;x++){
printf("%s\n",frases[x]);
}
free(frases);
free(frasesTemp);
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar