Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/07/2005, 22:50
Znet
 
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.-