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 :)
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


0