SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: Iganguli en Miércoles 20 de Febrero de 2008, 17:57

Título: Problema Con Dev Cpp
Publicado por: Iganguli en Miércoles 20 de Febrero de 2008, 17:57
hola tengo este pequeño programa que lo que hace es que el usuario teclea una cadena y luego desplegarla al reves asi si por ejemplo el usuario escribe hola el programa despliega aloh bueno en fin el problema es que cuando lo corro en borland c v3 si jala pero cuando lo intento correr en dev no da me sale que hay violacion en el aceso de memoria si alguien me pudiera decir en que esty mal

Código: Text
  1.  
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. int main()
  6. {
  7. int i;
  8. char *cad;
  9. printf("introduce una cadena de carcateres \n");
  10. fflush(stdin);
  11. scanf("%[^\n]",cad);
  12. for(i=strlen(cad)-1;i>=0;i--)
  13. printf("%c",*(cad+i));
  14. return 0;
  15. }
  16.  
  17.  
Título: Re: Problema Con Dev Cpp
Publicado por: Eternal Idol en Miércoles 20 de Febrero de 2008, 18:55
warning C4700: uninitialized local variable 'cad' used


Estas usando un puntero sin inicializar (cad) ...
Título: Re: Problema Con Dev Cpp
Publicado por: ProfesorX en Miércoles 20 de Febrero de 2008, 18:57
Clasico error de principiante al comenzar con punteros y memoria dinamica, defines una variable de tipo char*, pero nunca asignas espacio para la cadena, en realidad no es que funcione en borland, simplemente que al ejecutarse en borland tienes suerte de que no se sobrescriba algo vital, y por eso "aparentemente" funciona, pero no es asi. La solucion es simplemente reservar memoria suficiente para la variable.

Si utilizas C:

Código: Text
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6. int main()
  7. {
  8.     int i;
  9.     char *cad;
  10.  
  11.     // Con esta sentencia reservas 30 posiciones de memoria para la cadena
  12.     cad = (char*) malloc(sizeof(char) * 30);
  13.    
  14.     printf("introduce una cadena de carcateres \n");
  15.     fflush(stdin);
  16.     scanf("%[^\n]",cad);
  17.     for (i=strlen(cad)-1;i>=0;i--)
  18.         printf("%c",*(cad+i));
  19.  
  20.     // Liberas la memoria utilizada
  21.     free (cad);
  22.  
  23.     return 0;
  24. }
  25.  
  26.  

Si utilizas C++
Código: Text
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6. int main()
  7. {
  8.     int i;
  9.     char *cad;
  10.  
  11.     // Con esta sentencia reservas 30 posiciones de memoria para la cadena
  12.     cad = new char[30];
  13.     printf("introduce una cadena de carcateres \n");
  14.     fflush(stdin);
  15.     scanf("%[^\n]",cad);
  16.     for (i=strlen(cad)-1;i>=0;i--)
  17.         printf("%c",*(cad+i));
  18.    
  19.     // Liberas la memoria utilizada
  20.     delete cad;
  21.  
  22.     return 0;
  23. }
  24.  
  25.  

Saludos :)
Título: Re: Problema Con Dev Cpp
Publicado por: Iganguli en Miércoles 20 de Febrero de 2008, 18:57
ok tanx por la ayuda
Título: Re: Problema Con Dev Cpp
Publicado por: ProfesorX en Miércoles 20 de Febrero de 2008, 18:58
Me gano por unos minutos eternal Idol, pero mi explicacion esta mas completa jeje