• Viernes 8 de Noviembre de 2024, 21:33

Autor Tema:  Problema Con Dev Cpp  (Leído 1492 veces)

Iganguli

  • Miembro activo
  • **
  • Mensajes: 51
  • Nacionalidad: mx
    • Ver Perfil
Problema Con Dev Cpp
« en: Miércoles 20 de Febrero de 2008, 17:57 »
0
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.  

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema Con Dev Cpp
« Respuesta #1 en: Miércoles 20 de Febrero de 2008, 18:55 »
0
warning C4700: uninitialized local variable 'cad' used


Estas usando un puntero sin inicializar (cad) ...

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Problema Con Dev Cpp
« Respuesta #2 en: Miércoles 20 de Febrero de 2008, 18:57 »
0
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 :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

Iganguli

  • Miembro activo
  • **
  • Mensajes: 51
  • Nacionalidad: mx
    • Ver Perfil
Re: Problema Con Dev Cpp
« Respuesta #3 en: Miércoles 20 de Febrero de 2008, 18:57 »
0
ok tanx por la ayuda

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Problema Con Dev Cpp
« Respuesta #4 en: Miércoles 20 de Febrero de 2008, 18:58 »
0
Me gano por unos minutos eternal Idol, pero mi explicacion esta mas completa jeje

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================