pregunta

Iniciado por alejandro5837, 27 Junio 2013, 04:44 AM

0 Miembros y 1 Visitante están viendo este tema.

alejandro5837

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 (cpp) [Seleccionar]
[

#include "stdafx.h"
#include "conio.h"
#include "stdio.h"


void main()
{
int n,i,j,aux;
char h;
int *A;
char *p;

printf("Ingresa el numero de datos que quieras en tu lista:   ");
scanf ("%d",&n);
A =new int [n+1];

printf("\n");

for(i=1;i<=n;i++)
{
printf("Ingresa la letra en la posicion %d es:",i);
scanf("%s",&h);
int x =  static_cast <int> ( h );
A[i]=h;
}

printf("\n");
printf("\n");

for(i=1;i<=n-1;i++)
{
for(j=1;j<=n-1;j++)
{
if(A[j]>A[j+1])
{
aux=A[j];
A[j]=A[j+1];
A[j+1]=aux;
}
}
}
printf("\n Asendente \n");
for(i=1;i<=n;i++)
{
printf(" %c \n",A[i]);
}
printf("\n Desedente \n");

for(i=n;i>=1;i--)
{
printf(" %c \n",A[i]);
}
delete [] A;


getchar();
getchar();
}

]

engel lex

di el mensaje de error exacto, copia y pegalo porque así no es realmente util...
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

alejandro5837

este es el mensaje

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

engel lex

no soy demasiado conocedor de c... pero esto me suena mal

A=h;

porque
char h;
int *A;


h es un caracter y A es un apuntador a un entero... creo que esos tipos no son compatibles
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

alejandro5837

#4
  mm ok noce por que aparece así pero en mi código lo tengo
Código (cpp) [Seleccionar]
[ A[i]=h]

rir3760

Cita de: alejandro5837 en 27 Junio 2013, 04:44 AMtengo 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|.

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 (cpp) [Seleccionar]
scanf("%s",&h);
Ello porque el especificador "%s" es para leer una palabra, si quieres leer un carácter debes utilizar " %c".

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

eferion

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 (cpp) [Seleccionar]

// c++
std::vector<int> A;

// c
int *A;
A =new int [n+1]; // esta línea te sobraría ya que el vector libera la memoria por ti.

// c++
A.push_back( h );

// c
A[i]=h;


2. Usa las clases c++ para leer y escribir
Código (cpp) [Seleccionar]

// c++
std::cout << "Ingresa el numero de datos que quieras en tu lista:   ";

//c
printf("Ingresa el numero de datos que quieras en tu lista:   ");

// c++
std::cin >> n;

// c
scanf("%c",&h);


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

alejandro5837

OK muchas gracias