Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: alejandro5837 en 27 Junio 2013, 04:44 am



Título: pregunta
Publicado por: alejandro5837 en 27 Junio 2013, 04:44 am
tengo un problema con este programa corre pero al fina me manda un mensaje de error donde dice que la variable h ha sido corrompida o algo asi me podrían ayudar
Código
  1. [
  2.  
  3. #include "stdafx.h"
  4. #include "conio.h"
  5. #include "stdio.h"
  6.  
  7.  
  8. void main()
  9. {
  10. int n,i,j,aux;
  11. char h;
  12. int *A;
  13. char *p;
  14.  
  15. printf("Ingresa el numero de datos que quieras en tu lista:   ");
  16. scanf ("%d",&n);
  17. A =new int [n+1];
  18.  
  19. printf("\n");
  20.  
  21. for(i=1;i<=n;i++)
  22. {
  23. printf("Ingresa la letra en la posicion %d es:",i);
  24. scanf("%s",&h);
  25. int x =  static_cast <int> ( h );
  26. A[i]=h;
  27. }
  28.  
  29. printf("\n");
  30. printf("\n");
  31.  
  32. for(i=1;i<=n-1;i++)
  33. {
  34. for(j=1;j<=n-1;j++)
  35. {
  36. if(A[j]>A[j+1])
  37. {
  38. aux=A[j];
  39. A[j]=A[j+1];
  40. A[j+1]=aux;
  41. }
  42. }
  43. }
  44. printf("\n Asendente \n");
  45. for(i=1;i<=n;i++)
  46. {
  47. printf(" %c \n",A[i]);
  48. }
  49. printf("\n Desedente \n");
  50.  
  51. for(i=n;i>=1;i--)
  52. {
  53. printf(" %c \n",A[i]);
  54. }
  55. delete [] A;
  56.  
  57.  
  58. getchar();
  59. getchar();
  60. }
  61.  
  62. ]


Título: Re: pregunta
Publicado por: engel lex en 27 Junio 2013, 04:47 am
di el mensaje de error exacto, copia y pegalo porque así no es realmente util...


Título: Re: pregunta
Publicado por: alejandro5837 en 27 Junio 2013, 04:50 am
este es el mensaje

Run-Time Check fallo # 2 - Pila alrededor de la variable "h" se corrompió.


Título: Re: pregunta
Publicado por: engel lex en 27 Junio 2013, 04:54 am
no soy demasiado conocedor de c... pero esto me suena mal

Código:
A=h;

porque
Código:
char h;
int *A;

h es un caracter y A es un apuntador a un entero... creo que esos tipos no son compatibles


Título: Re: pregunta
Publicado por: alejandro5837 en 27 Junio 2013, 05:04 am
  mm ok noce por que aparece así pero en mi código lo tengo
Código
  1. [ A[i]=h]


Título: Re: pregunta
Publicado por: rir3760 en 27 Junio 2013, 17:28 pm
tengo un problema con este programa corre pero al fina me manda un mensaje de error donde dice que la variable h ha sido corrompida o algo asi me podrían ayudar
Ese programa tiene algunas deficiencias ya que no utiliza casi nada de C++. Por favor lee el tema |Lo que no hay que hacer en C/C++. Nivel basico| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html).

Cosas a cambiar hay a varias empezando por el nombre de los encabezados y la definición de la función main.

El error principal se encuentra en la linea:
Código
  1. scanf("%s",&h);
Ello porque el especificador "%s" es para leer una palabra, si quieres leer un carácter debes utilizar " %c".

Un saludo


Título: Re: pregunta
Publicado por: eferion en 27 Junio 2013, 17:44 pm
El programa este es un revuelto de c y c++ poco claro.

Lo primero que debes decidir es si programas en c o en c++... no queda muy bonito usar printf y scanf ( propias del lenguaje c ) con new y static_cast ( propias de c++ ).

Si usas c++ aprovecha sus características todo lo posible... en caso contrario casi mejor hazlo en c... mezclar de esta forma los dos lenguajes creo que solo sirve para que te lies más.

si decides hacerlo en c++ yo te propondría algunos cambios:

1. En vez de usar buffers usa vectores. Aprender a manejar la memoria es imprescindible... pero si no es estrictamente necesario dejar que la stl la maneje por ti te ahorrará muchos quebraderos de cabeza.
Código
  1. // c++
  2. std::vector<int> A;
  3.  
  4. // c
  5. int *A;
  6. A =new int [n+1]; // esta línea te sobraría ya que el vector libera la memoria por ti.
  7.  
  8. // c++
  9. A.push_back( h );
  10.  
  11. // c
  12. A[i]=h;

2. Usa las clases c++ para leer y escribir
Código
  1. // c++
  2. std::cout << "Ingresa el numero de datos que quieras en tu lista:   ";
  3.  
  4. //c
  5. printf("Ingresa el numero de datos que quieras en tu lista:   ");
  6.  
  7. // c++
  8. std::cin >> n;
  9.  
  10. // c
  11. scanf("%c",&h);

3. Elimina variables sin uso. ( char *p ). Esto no es propio de c++ sino una buena práctica de programación :)


Título: Re: pregunta
Publicado por: alejandro5837 en 28 Junio 2013, 01:26 am
OK muchas gracias