Programación General > C/C++

 Problema con la segunda lista

<< < (2/8) > >>

JuanK:
Más o menos esa es la idea.
Lo más recomendable es que en cada archivo ubiques tareas especificas, por ejemplo si tienes funciones que trabajan el archivo en memoria, lo recomendable es que haya un archivo donde esten todas estas funciones, si hay funciones que solo hacen trabajos del archivo en disco..igualmente, si manejas estructuras de datos, todas estas funciones de manejo de esta estructura, desde su creacion, hasta el dezplazamiento, insercio o borrado de datos, deberian ir por aparte, todo es cuestion de que clasifiques tus funciones de acuerdo a lo que hagan.
Debes ser precabido y de preferencia todas las definiciones de tu programa meterlas en un archivo .h, asi en tu programa en vez de escribir:
 
--- Código: Text ---/*~-1*//*~XSF_LANGUAGE: C/C++*//*~K*//*~+:Este Programa busca en el dico duro en la carpeta que se le indique todos los archivos con estension C o H, crea una lista con ellos, y despues lee todos los archivos que estan en esta lista para buscar los "define" que hay en ellos, y realiza otra lista con estos.*//*~K*//*~+:Libresias*//*~T*/#include <alloc.h>#include <conio.h>#include <dir.h>#include <dirent.h>#include <dos.h>#include <stdio.h>#include <stdlib.h>#include <string.h> /*~K*//*~+:Estructuras de las dos Listas*//*~T*/struct ListaArchivos { char *NombreArchivo;                       char *NombreCarpeta;                       int  Indentificador;                       ListaArchivos *Archivo_anterior_Ptr, *Archivo_siguiente_Ptr;                       ListaArchivos ()                       : Archivo_anterior_Ptr(NULL), Archivo_siguiente_Ptr(NULL) {};                     } ; struct ListaDefines { char *NombreDefine;                      int  NumeroElemento;                      ListaDefines *Define_anterior_Ptr, *Define_siguiente_Ptr;                      ListaDefines ()                      : Define_anterior_Ptr(NULL), Define_siguiente_Ptr(NULL) {};                    } ;/*~K*//*~+:Variables Globales*//*~T*/struct ListaArchivos *ListaArchivos_Ptr = NULL;struct ListaDefines *ListaDefines_Ptr = NULL;int i = 0;int j = 0;int k = 0;int PrimerVez_bt = 0;int PrimerFallo_bt = 0;int Fallo = 0;int Indentificador_u16 = 0;int Numero_u16 = 0;int YaExiste = 0;int YA = 0;int YA1 = 0;/*~K*//*~+:Constantes*//*~T*/#define FinalLinea        ''#define Tabulador         0x09#define Retorno           0x0A#define Espacio           0x20#define Almoadilla        0x23#define ParentesisAbierto 0x28#define ParentesisCerrado 0x29#define Punto             0x2E#define Semicoma          0x3B#define Letra_C           0x43#define Letra_H           0x48#define LlaveAbierta      0x7B#define LlaveCerrada      0x7D#define Copyright         0xA9#define MAX_LONG_D_N      14  metes todo eso dentro de un archivo .h, por ejemplo radarman.h y colocas esto en
el encabezado de tu programa asi:
#include"radarman.h"
si usas variables globales, en cada archivo que las vuelvas a usar deberas colocar: ejm

extern int mivariable;

sin embargo en el archivo donde este lña declaracion lo colocas normalmente
int mivariable;

Eso es todo por el momento

Por otro lado, seguramente esque hay codigo que no conozco en c, por eso dije que tu programa era cpp y tal vez sea algo de c que nunca he manejado, por ejemplo:
 
--- Código: Text ---struct ListaArchivos { char *NombreArchivo;                       char *NombreCarpeta;                       int  Indentificador;                       ListaArchivos *Archivo_anterior_Ptr, *Archivo_siguiente_Ptr;/*--------------------------------------------------*/                        ListaArchivos ()                       : Archivo_anterior_Ptr(NULL), Archivo_siguiente_Ptr(NULL) {}; /*-------------------------------------------------*/                     } ;  
Me perdonas por la ignorancia pero realmenmte no se que hace la instruccion que te coloque entre lineas.
Me explicas porfa...

Juank

radarman:
Buenas otra vez,

tienes toda la razon eso es C++, no me habia dado cuenta, pero ahora si que estoy seguro que es lo unico.

Entonces esto:

struct ListaArchivos { char *NombreArchivo;
                       char *NombreCarpeta;
                       int  Indentificador;
                       ListaArchivos *Archivo_anterior_Ptr, *Archivo_siguiente_Ptr;
/*--------------------------------------------------*/
                        ListaArchivos ()
                       : Archivo_anterior_Ptr(NULL), Archivo_siguiente_Ptr(NULL) {};

/*-------------------------------------------------*/
                     } ;
--------------------------------------------------------------------------------

en C es:

struct DateiElement { char *DateiName;
                      char *OrdnerName;
                      int  Handler;
                      DateiElement *vorherige_Datei_Ptr, *naechste_Datei_Ptr;
                    } *vorherige_Datei_Ptr = NULL, *naechste_Datei_Ptr = NULL;

_________________________________

que me imagino ya lo conoceras.

De todas formas tengo el problema que tengo es que no puedo insertar mas de 775 elementos en la segunda lista, y necesito poder hacerlo porque tengo muchos mas.

Cuando lo miro con el Borlandc me indica que se guarda en un segmento cualquiera xxxx : yyyy ds : xyzt, pero cuando el "ds" me llega la limite se para y no se pasa a otro segmento de memoria, entonces queria saber si es posible indicarle que lo haga para que me siga creando la lista.

Un saludo.

JuanK:
1- trata de usar algo diferente a borland, ya que otros compiladores ya te tienen solucionado ese problema implicitamente.
2-Como la memoria ha llegado a su tope, deberias pensar en un medio de almecenamiento secundario, es decir cada que completes x cantidad de registros deberas bajar estos registros a un archivo en disco que puedes utilizar de manera temporal, y asi liberar los registros en memoria, mejor dicho es como hacer un reciclado de memoria... espero que me haya hecho entender...

JuanK

radarman:
Hola juank,
muchas gracias por tus aclaraciones, pero si puedo abusare un poco mas de tus conocimientos y paciencia.

Te explico lo que he cambiado, he hecho una rutina que me crea un archivo "txt" cada vez que llego a los 700 elementos, entonces segun yo despues borro la lista y creo una nueva otra vez hasta los 700 elementos, el problema viene a la hora de borrar la lista, segun yo lo tengo que hacer con el "free" ya que la creo con "malloc", pero eso no ocurre.

Entonces te pediria si puedes ver la sutina de borrar lista de defienes (es con la que estoy trabajando ahora) y ver si puedes encontrar el fallo.

Muchas gracias.

JuanK:
En las 2 rutinas don de efectuas el "borrado" lo que estas haciendo  es cambiando la direccion del apuntador.
Recuerda que cuando utilizas malloc, lo que haces es "reservar" una porcion de la memoria, una vez reservada creas una variable que apunte a ese segmento.
Por ejemoplo imagina que llamas a malloc pero que no le asignas el resultado a nada, es decir:
 
--- Código: Text --- int main(){ . .  malloc(5);}  Esto no te arroja ningun error...per que paso con la memoria que llamaste con malloc?..pues que quedo reservada, entonces si tu le asignas null al puntero, le estas es cambiando su direccion, mas no liberando la memoria que ha sidio reservada, para esto necesariamente debes utilizar free();
No he estudiado muy a fondo tu programa, asi que es probable que me quede algun "agujerillo" pendiente por ahi, pero de todod modos se supone que este codigo funciona, por que es el que yo uso cuando trabajo con listas.
 
--- Código: Text --- int BorrarListaDefine (void){/*JUANK*/   struct ListaDefines *aux= NULL;      PrincipioListaDefine ();   aux = ListaDefines_Ptr;   while(ListaDefines_Ptr->Define_siguiente_Ptr!=NULL)     {      ListaDefines_Ptr=aux;      aux = aux->Define_siguiente_Ptr;      free(ListaDefines_Ptr);    }    return 1;}  Espero que te sea de utilidad.
Chau

JuanK.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior

Ir a la versión completa