Foros del Web » Programación para mayores de 30 ;) » Programación General »

Listas (Problemas)

Estas en el tema de Listas (Problemas) en el foro de Programación General en Foros del Web. Hola gurus, aqui un problema que me tiene harto ya. Algo tengo mal aqui pongo el codigo y les muestro donde me sale error. Unit1.cpp ...
  #1 (permalink)  
Antiguo 12/07/2005, 22:50
 
Fecha de Ingreso: marzo-2002
Ubicación: Salta Capital - Actualmente estudiando en Córdoba
Mensajes: 430
Antigüedad: 22 años, 1 mes
Puntos: 0
Listas (Problemas)

Hola gurus, aqui un problema que me tiene harto ya.
Algo tengo mal aqui pongo el codigo y les muestro donde me sale error.

Unit1.cpp
Código PHP:
//---------------------------------------------------------------------------
#include <vcl.h>
#include <string.h>
#include <stdio.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponentOwner)
        : 
TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Salir1Click(TObject *Sender)
{
 exit(
0);       
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 
Nodo *raiz;
 
raiz=NULL;
 
FILE *fp;
 
cta aux,aux2;
 if(
Edit1->Text==""||Edit1->Text==" ")//queda verificacion cuando solo hay espacios
 
{
    
MessageBox(0,"Debe ingresar una cuenta no vacia",0,0);
 }
 else
 {
    if((
fp=fopen("C:\\cuentas.dat","r"))==NULL)
    { 
MessageBox(0,"Error de apertura",0,0);}
    else
    {
    
delete fp;
    
fclose(fp);
    
/*Cargamos cuentas del archivo a la lista.*/
    
TForm1::LoadFile(aux,aux2,raiz);
    
/*Insercion Ordenada.*/
    
TForm1::InsSort(raiz);
    
//Guardamos lista en archivo
    
TForm1::SaveFile(raiz);
    
MessageBox(0,"Cuenta guardada con Exito!","Guardado",0);
    }
 }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Cuentas1Click(TObject *Sender)
{
 if((
fopen("C:\\cuentas.dat","a+"))==NULL)
 {
  
MessageBox(0,"Error al crear archivo",0,0);
  exit(
0);
 }
 else
 {
  
Edit1->Text="";
  
ComboBox1->Text="";
  
ComboBox1->Clear();
  
PageControl1->Visible=true;
 }
}
//---------------------------------------------------------------------------
void TForm1::LoadFile(cta &auxcta aux2Nodo* &raiz)
{
 
FILE *ld;
 
ld=fopen("C:\\cuentas.dat","r");
 
fread(&aux2,sizeof(aux2),1,ld);
 while(!
feof(ld))
 {
  
aux.id=aux2.id;
  
aux.ban=aux2.ban;
  
aux.tban=aux2.tban;
  
aux.cban=aux2.cban;
  
strcpy(aux.cuenta,aux2.cuenta);
  
TForm1::LoadList(aux,raiz);
  
fread(&aux2,sizeof(aux2),1,ld);
 }
 
fclose(ld);
}
//---------------------------------------------------------------------------
void TForm1::LoadList(cta auxNodo* &raiz)
{
 
Nodo *ncta;
 
ncta = new Nodo;
 
ncta->info.id=aux.id;
 
ncta->info.ban=aux.ban;
 
ncta->info.tban=aux.tban;
 
ncta->info.cban=aux.cban;
 
strcpy(ncta->info.cuenta,aux.cuenta);
 if(
raiz==NULL)
 {
  
raiz=ncta;
 }
 else
 {
  
ncta->prox=raiz;
  
raiz=ncta;
 }
 
//ComboBox1->Items->Add(ncta->info.cuenta);
}
//---------------------------------------------------------------------------
void TForm1::InsSort(Nodo* &raiz)
{
 
Nodo *nuevo;
 
nuevo = new Nodo;
 
nuevo->info.id=1/*Hacer funcion para ver cual es el id mas grande en la
 lista y luego sumarle 1*/
 
nuevo->info.ban=0;
 
nuevo->info.tban=0;
 
nuevo->info.cban=0;
 
strcpy(nuevo->info.cuenta,Edit1->Text.c_str());
 
Nodo *p,*q;
 
//Si no hay nada en el archivo, se inserta al principio del mismo la nueva cta.
 
if(raiz==NULL)
 {
  
raiz=nuevo;
 }
 else
 {
    
//---------
    
q=raiz;
    for(
p=raiz;p!=NULL&&strcmp(nuevo->info.cuenta,p->info.cuenta)>0;p=p->prox)
    {
     
q=p;
    }
    if(
p==q)
    {
     
//Elemento al inicio de la lista
     
nuevo->prox=raiz;
     
raiz=nuevo;
    }
    else
    {
     
//Inserta segun le corresponde el orden
     
q->prox=nuevo;
     
nuevo->prox=p;
    }
    
//---------
 
}
}
//---------------------------------------------------------------------------
void TForm1::SaveFile(Nodoraiz)
{
 
cta ins;
 
FILE *fw;
 
Nodo *r;
 if((
fw=fopen("C:\\cuentas2.dat","a+"))==NULL)
 {
  
MessageBox(0,"Error de apertura de archivo",0,0);
  exit(
1);
 }
 else
 {      
r=raiz;
        while(
r!=NULL)
        {
         
//ShowMessage(r->info.cuenta);
         
ins.id=r->info.id;
         
ins.ban=r->info.ban;
         
ins.tban=r->info.tban;
         
ins.cban=r->info.cban;
         
strcpy(ins.cuenta,r->info.cuenta);
         
fwrite(&inssizeof(ins), 1fw);
         
r=r->prox;
        }
        
/*delete("c:\\cuentas.dat");
        fclose(fw);*/
 
}
}
//--------------------------------------------------------------------------- 
El error que me sale al ejecutar la accion es:

Proyect ban.exe raised exception class EAccesViolation with message 'AccesViolation at address 00401F7C in module "Ban.exe". Read of address 38373635. Process stopped. Use Step or Run to Continue

En donde me sale el ins.id=r->info.id; y si borro esta linea sigue con la siguiente y asi.
Es problema de memoria pero no descubro donde esta mi error, por ahi me mando la macana cuando inserto ordenadamente, o cuando cargo los datos del archivo a la lista.
Espero una respuestita, desde ya muchas gracias, ya me hice bolas con esto jajaja.
Salu2
__________________
Nada es imposible, con un poco de esfuerzo se logran las cosas.-
  #2 (permalink)  
Antiguo 13/07/2005, 06:51
 
Fecha de Ingreso: marzo-2002
Ubicación: Salta Capital - Actualmente estudiando en Córdoba
Mensajes: 430
Antigüedad: 22 años, 1 mes
Puntos: 0
Si sirve de algo la estructura para la lista es la siguiente:


Código PHP:

struct cta

int id;
int ban
int tban
int cban
char cuenta[30];
};

struct Nodo
{
cta info
Nodo *prox;
}; 
P/D: Odio las listas jejejeje
Salu2
__________________
Nada es imposible, con un poco de esfuerzo se logran las cosas.-
  #3 (permalink)  
Antiguo 13/07/2005, 08:27
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 19 años, 11 meses
Puntos: 74
Podes usar la STL que es mas simple, aca hay un par de articulos:
http://www.daniweb.com/code/cplusplus.html

Array or Vector? A look at the STL vector
Associate words with the STL map
Experimenting with the STL list
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #4 (permalink)  
Antiguo 14/07/2005, 20:18
 
Fecha de Ingreso: marzo-2002
Ubicación: Salta Capital - Actualmente estudiando en Córdoba
Mensajes: 430
Antigüedad: 22 años, 1 mes
Puntos: 0
Aca dejo otro link interesante que explica algunos detalles sobre el manejo de listas de la STL.
Espero les sirva para complemetar despues con el otro link de eternal.
Salu2.-

http://www.msoe.edu/eecs/ce/courseinfo/stl/list.htm
__________________
Nada es imposible, con un poco de esfuerzo se logran las cosas.-
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 03:16.