Debe estar conectado para participar
Buscar en los foros:


 






Uso de Comodín:
*    coincide cualquier número de caracteres
%    coincide exactamente un caracter

Problema con ejercicio de c++

No hay Etiquetas
Entrada
Entry Level

lxsplk

entradas: 90

18:11 02/02/2009

1

Hola gente, posteo aca a ver si me pueden solucionar un problema que tengo cuando ejecuto en el Visual Studio c++ 6 algo que hice, me tira un error asi…

unknown software exception (0xc00000fd) en la direccion 0x004228b7

Les dejo el codigo en el Spoiler, agradesco mucho su ayuda de antemano
ALE ! ! !

#include <iostream>
#include <cstring>
using namespace std;
void main ()
{
int l,f,z,j,y;
char U[8],u[3200],P[8],p[100]={0},N[100][100]={0},T[100][100]={0},o[100][100]={0},D[100][100]={0},E[100][100]={0},S[100][100]={0};
y=0;
strcpy(U,"alexis&quotwink;
strcpy(P,"polak&quotwink;
do
{
cout<<"ingrese usuario :";
cin.getline(u,100);
}
while (strcmp(u,U)!=0);
cout<<"Usuario Valido"<<endl;
do
{
cout<<"ingrese password :";
cin.getline(p,100);
}
while(strcmp(p,P)!=0);
cout<<"Password Valido"<<endl;
cout<<"Elija el numero de lista que desea utilizar"<<endl<<" 1-ale 2-stephy 3-santi"<<endl;
cin>>l;
if(l==1)
{
cout<<"Ud eligio la lista de Ale"<<endl;
for(f=0;f<y;f++)
cout<<N[y][100]<<" "<<T[y][100]<<" "<<o[y][100]<<" "<<D[y][100]<<" "<<E[y][100]<<" "<<S[y][100]<<" "<<endl;
cout<<"Desea agregar clientes a la lista ?, en el caso afirmativo presione 1 "<<endl;
cin>>z;
if(z==1)
for(f=0;f<3200;f++)
{
fflush(stdin);
cout<<"Ingrese el Nombre: ";
cin.getline(N[f],100);
cout<<"Ingrese el Telefono: ";
cin.getline(T[f],100);
cout<<"Ingrese el Celular: ";
cin.getline(o[f],100);
cout<<"Ingrese la Direccion: ";
cin.getline(D[f],100);
cout<<"Ingrese el Encargo: ";
cin.getline(E[f],100);
cout<<"Ingrese el Saldo: ";
cin.getline(S[f],100);
cout<<"Desea agregar otro, presione N quiere salir, sino presione 1…"<<endl;
cin>>j;
if(j!=1)
f=3200;
if(j==1)
y=y+1;
}
}

cout<<"hola mundo"<<endl;
for(f=0;f<5;f++)
cout<<N<<" "<<T<<" "<<o<<" "<<D<<" "<<E<<" "<<S<<" "<<endl;
}

Hardcore Extreme Level

alesio_sps

entradas: 3452

18:27 02/02/2009

2

Mas o menos a que apunta el este codigo, parece que pide usuario y password, y muestra algo…

Como es el enunciado del ejercicio???

Entry Level

lxsplk

entradas: 90

18:42 02/02/2009

3

lo hice yo al ejercicio practicando pide password y clave hasta ahi bien, pide que elijas una lista de, hasta ahi bien el problema es q cuando quiero imprimir la lista no me deja y me tira numero al azar….

Midle End Level

_wanako_

entradas: 214

18:56 02/02/2009

4
Cita Iniciado por lxsplk
Ver Mensaje
unknown software exception (0xc00000fd) en la direccion 0x004228b7

Usá Valgrind y fijate que no estás liberando memoria, usás una enorme cantidad de arrays y encima los anidás en bucles sin liberar (memory leak)
Código horrible es poco, espero que sea tu primer ejercicio…

[SIGPIC][/SIGPIC]
MaximoOC: La velocidad del micro será expresada en octavos de milla cada quince días.

Hardcore Extreme Level

alesio_sps

entradas: 3452

18:59 02/02/2009

5
Cita Iniciado por lxsplk
Ver Mensaje
lo hice yo al ejercicio practicando pide password y clave hasta ahi bien, pide que elijas una lista de, hasta ahi bien el problema es q cuando quiero imprimir la lista no me deja y me tira numero al azar….

{
int l,f,z,j,y;
char U[8],u[3200],P[8],p[100]={0},N[100][100]={0},T[100][100]={0},o[100][100]={0},D[100][100]={0},E[100][100]={0},S[100][100]={0};

if(z==1)
for(f=0;f<3200;f++)
{
fflush(stdin);
cout<<"Ingrese el Nombre: ";
cin.getline(N[f],100);
cout<<"Ingrese el Telefono: ";
cin.getline(T[f],100);
cout<<"Ingrese el Celular: ";
cin.getline(o[f],100);
cout<<"Ingrese la Direccion: ";
cin.getline(D[f],100);
cout<<"Ingrese el Encargo: ";
cin.getline(E[f],100);
cout<<"Ingrese el Saldo: ";
cin.getline(S[f],100);
cout<<"Desea agregar otro, presione N quiere salir, sino presione 1…"<<endl;
cin>>j;
if(j!=1)
f=3200;
if(j==1)
y=y+1;
}
}

cout<<"hola mundo"<<endl;
for(f=0;f<5;f++)
cout<<N<<" "<<T<<" "<<o<<" "<<D<<" "<<E<<" "<<S<<" "<<endl;
}

No se si estoy en lo correcto, pero fijate que por ejemplo a N la declaras como un arreglo de dos dimensiones de 100*100, y en esa linea que te marque en negrita en el for, entre otras buscas acceder a la posision f,100 y por lo que veo en el for f va desde 0 hasta 3200 osea que estas fuera del rango del arreglo, y estas cayendo en cualquier lado de la memoria… ese es un error que veo…

Entry Level

lxsplk

entradas: 90

19:10 02/02/2009

6

muchas gracias, modifique la variable pero no el FOR voy a intentar, gracias

Aca actualize pero sigue sin imprimirlo

#include <iostream>
#include <cstring>
using namespace std;
void main ()
{
int l,f,z,j,y;
f=0;
y=0;
char Usuario[8],usuario_pedido[10],Password[8],password_pedido[10],Nombre[100][100]={0},telefono[100][100]={0},mobil[100][100]={0},Dirrecion[100][100]={0},Encargo[100][100]={0},Saldo[100][100]={0};
y=0;
strcpy(Usuario,"alexis&quotwink;
strcpy(Password,"polak&quotwink;
do
{
cout<<"ingrese usuario :";
cin.getline(usuario_pedido,100);
}
while (strcmp(usuario_pedido,Usuario)!=0);
cout<<"Usuario Valido"<<endl;
do
{
cout<<"ingrese password :";
cin.getline(password_pedido,100);
}
while(strcmp(password_pedido,Password)!=0);
cout<<"Password Valido"<<endl;
cout<<"Elija el numero de lista que desea utilizar"<<endl<<" 1-ale 2-stephy 3-santi"<<endl;
cin>>l;
if(l==1)
{
cout<<"Ud eligio la lista de Ale"<<endl;
for(f=0;f<y;f++)
cout<<Nombre[y][100]<<" "<<telefono[y][100]<<" "<<mobil[y][100]<<" "<<Dirrecion[y][100]<<" "<<Encargo[y][100]<<" "<<Saldo[y][100]<<" "<<endl;
cout<<"Desea agregar clientes a la lista ?, en el caso afirmativo presione 1 "<<endl;
cin>>z;
if(z==1)
do
{
fflush(stdin);
cout<<"Ingrese el Nombre: ";
cin.getline(Nombre[f],100);
cout<<"Ingrese el Telefono: ";
cin.getline(telefono[f],100);
cout<<"Ingrese el Celular: ";
cin.getline(mobil[f],100);
cout<<"Ingrese la Direccion: ";
cin.getline(Dirrecion[f],100);
cout<<"Ingrese el Encargo: ";
cin.getline(Encargo[f],100);
cout<<"Ingrese el Saldo: ";
cin.getline(Saldo[f],100);
cout<<"Desea agregar otro, presione 0 quiere salir, sino presione 1…"<<endl;
cin>>j;
y=y+1;
f=f+1;
}
while (j==1);
}
for(f=0;f<y;f++)
cout<<Nombre[5][20]<<" "<<telefono[5][20]<<" "<<mobil[5][20]<<" "<<Dirrecion[5][20]<<" "<<Encargo[5][20]<<" "<<Saldo[5][20]<<" "<<endl;
}

Hardcore Extreme Level

alesio_sps

entradas: 3452

21:29 02/02/2009

7
Cita Iniciado por lxsplk
Ver Mensaje
muchas gracias, modifique la variable pero no el FOR voy a intentar, gracias

Aca actualize pero sigue sin imprimirlo

#include <iostream>
#include <cstring>
using namespace std;
void main ()
{
int l,f,z,j,y;
f=0;
y=0;
char Usuario[8],usuario_pedido[10],Password[8],password_pedido[10],Nombre[100][100]={0},telefono[100][100]={0},mobil[100][100]={0},Dirrecion[100][100]={0},Encargo[100][100]={0},Saldo[100][100]={0};
y=0;
strcpy(Usuario,"alexis&quotwink;
strcpy(Password,"polak&quotwink;
do
{
cout<<"ingrese usuario :";
cin.getline(usuario_pedido,100);
}
while (strcmp(usuario_pedido,Usuario)!=0);
cout<<"Usuario Valido"<<endl;
do
{
cout<<"ingrese password :";
cin.getline(password_pedido,100);
}
while(strcmp(password_pedido,Password)!=0);
cout<<"Password Valido"<<endl;
cout<<"Elija el numero de lista que desea utilizar"<<endl<<" 1-ale 2-stephy 3-santi"<<endl;
cin>>l;
if(l==1)
{
cout<<"Ud eligio la lista de Ale"<<endl;
for(f=0;f<y;f++)
cout<<Nombre[y][100]<<" "<<telefono[y][100]<<" "<<mobil[y][100]<<" "<<Dirrecion[y][100]<<" "<<Encargo[y][100]<<" "<<Saldo[y][100]<<" "<<endl;
cout<<"Desea agregar clientes a la lista ?, en el caso afirmativo presione 1 "<<endl;
cin>>z;
if(z==1)
do
{
fflush(stdin);
cout<<"Ingrese el Nombre: ";
cin.getline(Nombre[f],100);
cout<<"Ingrese el Telefono: ";
cin.getline(telefono[f],100);
cout<<"Ingrese el Celular: ";
cin.getline(mobil[f],100);
cout<<"Ingrese la Direccion: ";
cin.getline(Dirrecion[f],100);
cout<<"Ingrese el Encargo: ";
cin.getline(Encargo[f],100);
cout<<"Ingrese el Saldo: ";
cin.getline(Saldo[f],100);
cout<<"Desea agregar otro, presione 0 quiere salir, sino presione 1…"<<endl;
cin>>j;
y=y+1;
f=f+1;
}
while (j==1);
}
for(f=0;f<y;f++)
cout<<Nombre[5][20]<<" "<<telefono[5][20]<<" "<<mobil[5][20]<<" "<<Dirrecion[5][20]<<" "<<Encargo[5][20]<<" "<<Saldo[5][20]<<" "<<endl;
}

Yo pondria:
do
.
.
.
.
While ((j==1)&&(f<100))

Midle End Level

_wanako_

entradas: 214

01:25 03/02/2009

8
Cita Iniciado por lxsplk
Ver Mensaje
muchas gracias, modifique la variable pero no el FOR voy a intentar, gracias

Aca actualize pero sigue sin imprimirlo

// El uso del bucle indiscriminado es un vicio… te lo repito "liberá memoria" y usá funciones en vez de bucles.

void main ()
{
int l,f,z,j,y;
f=0;
y=0;
char Usuario[8]…
Saldo[100][100]={0};
y=0; // por las dudas? :-)
strcpy(Usuario,"alexis&quotwink;
strcpy(Password,"polak&quotwink;
do
{

}
cout<<"Ud eligio la lista de Ale"<<endl;
for(f=0;f<y;f++) // ( f = 0 ; f < 0 ; f++ )

Editado: comentario sin sentido…
Igual fijate, sos desprolijo para escribir el code, si no destruís los arrays antes de entrar en un bucle los acumulás de manera exponencial y forzás el memory leak.

[SIGPIC][/SIGPIC]
MaximoOC: La velocidad del micro será expresada en octavos de milla cada quince días.

Hardcore Extreme Level

alesio_sps

entradas: 3452

10:54 03/02/2009

9
Cita Iniciado por _wanako_
Ver Mensaje
Editado: comentario sin sentido…
Igual fijate, sos desprolijo para escribir el code, si no destruís los arrays antes de entrar en un bucle los acumulás de manera exponencial y forzás el memory leak.

Corregime si me equivoco, pero por lo que sabia en C a menos que trabajes con memoria dinamica cuando haces declaracion de variables se pide el espacio de memoria y aunque no lo usea ese espacio ya esta tomado… va eso tenia entendido…

Nuevo miembro

Kasa.Ramone

entradas: 49

21:08 03/02/2009

10

*Usa funciones.
*Usa arrays dinamicos.
*Usa ficheros o BD(no creo que te guste andar cargando las listas cada vez que abris el programa).
*Tabula las lineas, sinceramente es ilegible.

Es entendible que no sepas usar algunas cosas, pero uno se tiene que dar cuenta cuando necesita otras herramientas, sobre todo remarco lo de la tabulación(si el foro te corta los espacios subi algun archivo de texto) que marca una gran diferencia a la hora de debuggear(o leer) código.

Hardcore Extreme Level

alesio_sps

entradas: 3452

21:32 03/02/2009

11
Cita Iniciado por Kasa.Ramone
Ver Mensaje
*Usa funciones.
*Usa arrays dinamicos.
*Usa ficheros o BD(no creo que te guste andar cargando las listas cada vez que abris el programa).
*Tabula las lineas, sinceramente es ilegible.

Es entendible que no sepas usar algunas cosas, pero uno se tiene que dar cuenta cuando necesita otras herramientas, sobre todo remarco lo de la tabulación(si el foro te corta los espacios subi algun archivo de texto) que marca una gran diferencia a la hora de debuggear(o leer) código.

Adiero a lo de las funciones, pero viendo como programa no se si este chico sepa manejo de archivos ni de memoria dinamica… lo de tabular se debe al foro, cuando copypasteas te pega el codigo de esa forma, ahora si el chico programa sin tabular, es urgente que empiece a tabular porque sino es muy difil entender el codigo…

Midle End Level

_wanako_

entradas: 214

11:02 04/02/2009

12
Cita Iniciado por alesio_sps
Ver Mensaje
Corregime si me equivoco, pero por lo que sabia en C a menos que trabajes con memoria dinamica cuando haces declaracion de variables se pide el espacio de memoria y aunque no lo usea ese espacio ya esta tomado… va eso tenia entendido…

Sep, por eso yo decía destruir arrays, no podés reutilizar memoria, el mismo array dentro del bucle pide mas memoria por más que tenga el mismo nombre, si tenés suerte? es contigua y sino trata de sobreescribir el mismo espacio y ahí es donde se forma el memory leak, lo ideal es como dijeron, arrays dinámicos, pedimos memoria dentro del bucle a medida que la necesito, igual en C o en C++ no se libera sola, tenés que destruir los arrays (destruir objetos) a la salida del bucle o usar un archivo de respaldo para guardar datos, usar funciones también es mejor que bucles, habría que escribir el ejercicio completo pero no tengo ganas de instalar libs y compiler…
Todos comenzamos programando así… como el ocote

Hacelo en Perl y te doy una mano

Perl -> Camel -> wanako

[SIGPIC][/SIGPIC]
MaximoOC: La velocidad del micro será expresada en octavos de milla cada quince días.

Hardcore Extreme Level

alesio_sps

entradas: 3452

11:15 04/02/2009

13

Una pregunta de c ya que estamos en el tema, alguien me recomienda algun IDE lindo para programar ventanas en c++???

Hardcore Extreme Level

Ukyo

.

entradas: 4393

11:38 04/02/2009

14
Cita Iniciado por alesio_sps
Ver Mensaje
lo de tabular se debe al foro, cuando copypasteas te pega el codigo de esa forma, ahora si el chico programa sin tabular, es urgente que empiece a tabular porque sino es muy difil entender el codigo…

Igual tenés la función CODE,

Código:
que te deja
	pegar
texto		tabulado
Midle End Level

_wanako_

entradas: 214

11:55 04/02/2009

15

http://www.codeblocks.org/

wysiwyg ni idea… ms visualestudio?

[SIGPIC][/SIGPIC]
MaximoOC: La velocidad del micro será expresada en octavos de milla cada quince días.

Extreme Level

Adris

QueTi

entradas: 1311

21:02 04/02/2009

16

Una sugerencia, trata de usar nombres de variables mas descriptivos. Este codigo lo agarras en 2 meses y no sabes que es cada cosa. Tambien segui los consejos de Kasa.Ramone. Saludos!

Ada Lovelace (1815-1852) : "Esta máquina puede hacer cualquier cosa que sepamos cómo ordenarle que la ejecute…"